Python,将函数应用于以数据为参数的熊猫数据框

时间:2020-03-30 18:52:47

标签: python pandas

我正在尝试将功能应用于熊猫数据框。 传递给函数的参数之一是单元格的值。

我对熊猫还很陌生,所以我想知道如何将其准确地提取出来。

 def filter_bags_only(bag, item):
    if len(item) == bag:
        return item


planes_bag_df = items_df['Bags'].applymap(func=filter_bags_only(bag=PLANES_LEN,item= # how to map this to the colunm items_df['Bags']? ))

如果我没有分配项目就跑:

   planes_bag_df = items_df['Bags'].apply(func=filter_bags_only(bag=PLANES_LEN))

我得到这个简单的错误。

TypeError: filter_bags_only() missing 1 required positional argument: 'item'

2 个答案:

答案 0 :(得分:0)

不确定我是否正确,但是根据我的理解,这里的内容是:

items_df['bag_len'] = item_df['Bags'].map(len)
planes_bag_df = item_df.query('bag_len == @PLANES_LEN')

我假设PLANES_LEN是一个标量。如果上述方法不能解决您的问题,请发布更多详细信息。

答案 1 :(得分:0)

我最终接受了Bishwarup Bhattacharjee的回答,并对其进行了一些修改。

由于我想提出一个更通用的解决方案。

class AssignBagMusts:
    df = ITEMS_DF
    _bags = BAGS

    @classmethod
    def create_bag_df(cls, bag):
        """
        Add len of string in Bags column to a column named beg_len.
        """
        bags_dict = {}
        df = cls.df[cls.df['bag_len'].apply(lambda bag_len: bag_len == bag)]
        print(df)
        bags_dict.update(df)
        return bags_dict

    @classmethod
    def return_bags_dict(cls, df):
        assert isinstance(df, pd.DataFrame)
        # Assign dictionaries for each bag with its must have items.
        assigned_with_must_bags = {name: cls.create_bag_df(length) for (name, length) in cls._bags.items()}
        # Assign names to each DataFrame created,.
        bags_df_dict = {name: pd.DataFrame(item) for name, item in assigned_with_must_bags.items()}
        return assigned_with_must_bags, bags_df_dict

    @classmethod
    def return_cleaned_df(cls, df_dict):
        raise NotImplementedError

    @classmethod
    def run(cls):
        df_to_be_dropped, create_bags = cls.return_bags_dict(df=cls.df)
        return cls.return_cleaned_df(create_bags)


if __name__ == '__main__':
    AssignBagMusts.run()

这样,如果cls.-bags应该收到更多的包类型,而我打算以后再做,那么我就为包类做好了准备。