首页 > 解决方案 > 如何根据单独数据框中的列值的存在来过滤数据框的行并从第二个数据框中附加列

问题描述

我有以下数据框:

数据框 1:

水果 蔬菜
芒果 菠菜
苹果 羽衣甘蓝
西瓜 壁球
夏南瓜

数据框 2:

物品 价格/磅
芒果 2
菠菜 1
苹果 4
2
夏南瓜 1

当两列都不存在于数据框 2 的“项目”系列中时,我想丢弃数据框 1 中的行,并且我想根据数据框 1 和 2 创建以下数据框 3:

水果 蔬菜 组合价
芒果 菠菜 3
夏南瓜 3

数据框 3 中的第三列是数据框 2 中商品价格的总和。

标签: pythonpandasdataframe

解决方案


和的组合meltmergeunstack

(df1[(df1['Fruit'].isin(df2['Item'])) & (df1['Vegetable'].isin(df2['Item']))]
    .reset_index()
    .melt(id_vars = 'index',value_vars = ['Fruit','Vegetable'])
    .merge(df2,left_on='value',right_on = 'Item')
    .drop(columns = 'Item')
    .set_index(['index','variable']).unstack(level = 1)
    .transform(lambda g: g.assign(Combination_Price=g.xs('Price/lb',axis=1,level=0).sum(axis=1)))
)

按成分生成组合价格和细分,以防万一

            value               Price/lb           Combination_Price
variable    Fruit   Vegetable   Fruit   Vegetable   
index                   
0           Mango   Spinach     2       1         3
3           Peach   Zucchini    2       1         3

推荐阅读