我有两个数据框如下
Inp1
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
等等。 请帮助了解如何实现这一目标
答案 0 :(得分:1)
分裂 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
值是唯一的)。然后对这些值求和。我不知道为什么你想要的输入不包含匹配对之一,但如果你不想要它,你可以通过删除 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