如何将一列除以另一列,其中一个数据帧';s列值对应于另一个数据帧';s列';在Python中有什么价值?

如何将一列除以另一列,其中一个数据帧';s列值对应于另一个数据帧';s列';在Python中有什么价值?,python,python-3.x,pandas,dataframe,data-science,Python,Python 3.x,Pandas,Dataframe,Data Science,请考虑Python中的以下数据帧: 数据框架 可乐 马驹 可乐 1. 狗 439 1. 猫 932 1. 青蛙 932 2. 狗 2122 2. 猫 454 2. 青蛙 773 3. 狗 9223 3. 猫 3012 3. 青蛙 898 IIUC,你可以合并然后分割,只是为了在下面使用一个新的df,使用@Manakin's 您可以使用.map 如果您有多个键要连接,那么@anky演示的merge将更有用 df1['ColF'] = df1['ColC'] / df1['ColA'].map(d

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

数据框架 可乐 马驹 可乐 1. 狗 439 1. 猫 932 1. 青蛙 932 2. 狗 2122 2. 猫 454 2. 青蛙 773 3. 狗 9223 3. 猫 3012 3. 青蛙 898
IIUC,你可以合并然后分割,只是为了在下面使用一个新的df,使用@Manakin's



您可以使用
.map

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

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

如果除了
ColA
之外还有更多的键要加入,那么这是一个很好的解决方案。@Manakin抱歉,没有找到你,
left\u on
right\u on
支持列名列表。或者,如果有匹配的列名,则可以使用后缀arg:
(df_a.merge(df_b,left_on='ColA',right_on='ColD',how='left',suffix=('',''u y')).assign(new=lambda x:x['ColC'].div(x['ColE'])。reindex(columns=[*df a.columns]+['new']))
这样它就保留了原始名称和重新索引工作啊抱歉,我的意思是,
在多个要连接的列中,assign和div/reindex感觉有点复杂。@Manakin现在,您可能需要将其分解为多行。
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
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