python - 基于另一个数据框列创建/更改数据框
问题描述
我有两个数据框如下
输入1
Col1 col2
10 usd,hkg
20 tst, fds
30 hgf, usd
Inp2
X_col1 x_col2
200 usd
100 hkg
250 tst
280 fds
.... 很快
我想使用 Inp1 中的 col2 循环我的 Inp2 数据帧以实现以下输出
Out
Col1 tot col2
10 300 usd,hkg
20 530 tst,fds
等等。请帮助如何实现这一目标
解决方案
分裂df1['col2']
然后爆炸。这使我们能够生成唯一的合并密钥。
>>> df1['col2'] = df1['col2'].str.split(r',\s*')
>>> df1
Col1 col2
0 10 [usd, hkg]
1 20 [tst, fds]
2 30 [hgf, usd]
>>> df1.explode('col2')
Col1 col2
0 10 usd
0 10 hkg
1 20 tst
1 20 fds
2 30 hgf
2 30 usd
合并后,您可以获取第二个输入框中的数量。
>>> m = df1.explode('col2').merge(df2, left_on='col2', right_on='x_col2', how='left')
>>> m
Col1 col2 X_col1 x_col2
0 10 usd 200.0 usd
1 10 hkg 100.0 hkg
2 20 tst 250.0 tst
3 20 fds 280.0 fds
4 30 hgf NaN NaN
5 30 usd 200.0 usd
将它们分配给m
,然后设置要附加到索引df1_m
上的新数据框的数据Col1
(假设Col1
值是唯一的)。然后对这些值求和。我不知道为什么您想要的输入不包含匹配对之一,但如果您不想要它,您可以通过删除 where 来丢弃它df['Col1'] == 30
。
>>> df1_m = df1.set_index('Col1')
>>> df1_m['sum'] = m.groupby('Col1')['X_col1'].sum()
>>> df1_m.reset_index()
Col1 col2 sum
0 10 [usd, hkg] 300.0
1 20 [tst, fds] 530.0
2 30 [hgf, usd] 200.0
推荐阅读
- polymer - 使用特定 tensorboard 的 Web 组件的推荐方法是什么?
- amazon-web-services - 指标过滤器分辨率
- unity3d - 更改材质所依赖的纹理属性后,是否必须再次将纹理添加回材质中?
- maven - Maven 配置文件继承
- bash - 未正确测试条件
- plugins - PhpStorm Shopware 插件快捷方式“swconfig”不起作用
- sql - 关于 Select from (select...) 语句的说明
- angular - 从 Angular 6 mat-selection-list 获取选定值的列表
- ios - Swift 字符串转换为 SwiftDate
- batch-file - 如何删除notwork文件夹中的所有内容