如何将一列除以另一列,其中一个数据框的列值对应于 Python Pandas 中另一个数据框的列值?

How to divide one column by another where one dataframe's column value corresponds to another dataframe's column's value in Python Pandas?

考虑 Python Pandas 中的以下数据帧:

DataframeA

ColA ColB ColC
1 dog 439
1 cat 932
1 frog 932
2 dog 2122
2 cat 454
2 frog 773
3 dog 9223
3 cat 3012
3 frog 898

DataframeB

ColD ColE
1 101
2 314
3 124

请注意,ColB 只是在 ColA 向上迭代时重复它的字符串值。 ColC 和 ColE 是随机的。 ColA 和 ColD 对应。 ColD 值永远不会有重复(如地图)。

我想在 ColA == ColD 的任何地方将 ColC 除以 ColE,理想情况下将结果值放在 DataframeA 的新列中(或者只是让它覆盖 ColC)。结果值应该可以有小数。

如何在 Python Pandas 中执行此操作?

IIUC,你可以合并然后划分,只是为了下面的新 df 使用,否则使用@Manakin 的 .

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