在Python中,如果一个数据帧的列值对应于另一个数据帧的列值,如何将一列除以另一列?

2024-05-23 15:39:13 发布

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

在Python熊猫中考虑以下数据帧:

DataframeA

^{tb1}$

数据框架b

^{tb2}$

要注意的是,ColB只是在ColA向上迭代时重复它的字符串值。ColC和ColE是随机的。可乐和冷饮相对应。冷值永远不会重复(如贴图)

我想将ColC除以ColE,只要ColA==ColD,理想情况下,将得到的值放在DataframeA的一个新列中(或者让它覆盖ColC)。结果值应该能够有小数

我怎样才能在Python中做到这一点


Tags: 数据字符串框架情况理想coldcolecolc
2条回答

IIUC,您可以合并然后分割,只需在下面使用@Manakin'sanswer就可以了

out = (df_a.merge(df_b,left_on='ColA',right_on='ColD',how='left')
.assign(new=lambda x:x['ColC'].div(x['ColE'])).reindex(columns=[*df_a.columns]+['new']))

print(out)

   ColA  ColB  ColC        new
0     1   dog   439   4.346535
1     1   cat   932   9.227723
2     1  frog   932   9.227723
3     2   dog  2122   6.757962
4     2   cat   454   1.445860
5     2  frog   773   2.461783
6     3   dog  9223  74.379032
7     3   cat  3012  24.290323
8     3  frog   898   7.241935

您可以使用.map

如果您有多个键要连接,那么merge将更有用,如@anky所示

df1['ColF'] = df1['ColC'] / df1['ColA'].map(df2.set_index(['ColD'])['ColE'])

ColA   ColB  ColC       ColF
0     1   dog    439   4.346535
1     1   cat    932   9.227723
2     1  frog    932   9.227723
3     2   dog   2122   6.757962
4     2   cat    454   1.445860
5     2  frog    773   2.461783
6     3   dog   9223  74.379032
7     3   cat   3012  24.290323
8     3  frog    898   7.241935

相关问题 更多 >