首页 > 解决方案 > 基于另一个数据框列创建/更改数据框

问题描述

我有两个数据框如下

输入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

等等。请帮助如何实现这一目标

标签: pythonpandasdataframelookup

解决方案


分裂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

推荐阅读