我正在尝试将功能应用于熊猫数据框。 传递给函数的参数之一是单元格的值。
我对熊猫还很陌生,所以我想知道如何将其准确地提取出来。
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'
答案 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应该收到更多的包类型,而我打算以后再做,那么我就为包类做好了准备。