python - 如何根据单独数据框中的列值的存在来过滤数据框的行并从第二个数据框中附加列
问题描述
我有以下数据框:
数据框 1:
水果 | 蔬菜 |
---|---|
芒果 | 菠菜 |
苹果 | 羽衣甘蓝 |
西瓜 | 壁球 |
桃 | 夏南瓜 |
数据框 2:
物品 | 价格/磅 |
---|---|
芒果 | 2 |
菠菜 | 1 |
苹果 | 4 |
桃 | 2 |
夏南瓜 | 1 |
当两列都不存在于数据框 2 的“项目”系列中时,我想丢弃数据框 1 中的行,并且我想根据数据框 1 和 2 创建以下数据框 3:
水果 | 蔬菜 | 组合价 |
---|---|---|
芒果 | 菠菜 | 3 |
桃 | 夏南瓜 | 3 |
数据框 3 中的第三列是数据框 2 中商品价格的总和。
解决方案
和的组合melt
:merge
unstack
(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 - ModuleNotFoundError:没有名为“fenics”的模块
- graphql - 使用 type-graphql 和 RESTDataSource 为第二个 api 调用添加字段解析器
- php - Laravel spatie/laravel-activitylog - 调用模型 [Spatie\Activitylog\Models\Activity] 上的未定义关系 [用户]
- c# - 在同一个项目中同时使用 AddDbContextFactory() 和 AddDbContext() 扩展方法
- javascript - 如何处理动态挂载的组件的事件?
- java - 为什么 JEditorPane 提供蓝色?
- php - 如何使用 PHP 在 postgres 字段中保存“完整”的 JSON 响应
- android - 华为 AppGallery:链接到商品详情中的应用
- javascript - React.js 使用 react-table v7。状态更改后表不更新
- android - 什么是 IABHelper?