python - 如何根据单独数据帧中列值的存在来过滤数据帧的行并附加第二个数据帧中的列

标签 python pandas dataframe

我有以下数据框:

数据框1:

<表类=“s-表”> <标题> 水果 蔬菜 <正文> 芒果 菠菜 苹果 羽衣甘蓝 西瓜 Squash 桃色 西葫芦

数据框2:

<表类=“s-表”> <标题> 项目 价格/磅 <正文> 芒果 2 菠菜 1 苹果 4 桃色 2 西葫芦 1

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

<表类=“s-表”> <标题> 水果 蔬菜 组合价格 <正文> 芒果 菠菜 3 桃色 西葫芦 3

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

最佳答案

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

关于python - 如何根据单独数据帧中列值的存在来过滤数据帧的行并附加第二个数据帧中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66911494/

相关文章:

python pandas groupby() 结果

python - 词嵌入+其他特征是否可以解决分类问题?

python - 将年份和月份名称转换为 Pandas 数据框的日期时间列

python - 将数据框中同一标题下的多个列分组

python - 获取数据帧中每行中的前 n 个值及其出现的列名称

python - 排除要抓取的元素

python - 组合 for 和 if 循环

python - 从列转换为日期时间

python - 在每个数据集中创建包含 3 组数据的图表

python - 使用选择的 5*5 网格和范围字符串转换 DataFrame