2024-09-28 22:22:45 发布
网友
我有两个数据帧,如下所示
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
等等。 请帮助我们如何做到这一点
分裂df1['col2']然后爆炸。这允许我们生成一个唯一的合并密钥
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来丢弃它
m
Col1
df1_m
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
分裂
df1['col2']
然后爆炸。这允许我们生成一个唯一的合并密钥合并后,可以获得第二个输入帧中的数量
将它们分配给
m
,然后设置数据以附加到Col1
索引上的新数据帧df1_m
(假设Col1
值是唯一的)。然后对这些值求和。我不知道为什么您想要的输入不包含一个匹配对,但是如果您不想要它,您可以通过删除wheredf['Col1'] == 30
来丢弃它相关问题 更多 >
编程相关推荐