基于另一个dataframe列创建/更改dataframe

2024-09-28 22:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,如下所示

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

等等。 请帮助我们如何做到这一点


Tags: 数据outcol2col1usdtstfdstot
1条回答
网友
1楼 · 发布于 2024-09-28 22:22:45

分裂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,然后设置数据以附加到Col1索引上的新数据帧df1_m(假设Col1值是唯一的)。然后对这些值求和。我不知道为什么您想要的输入不包含一个匹配对,但是如果您不想要它,您可以通过删除wheredf['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

相关问题 更多 >