如何将一列除以另一列,其中一个数据帧';s列值对应于另一个数据帧';s列';在Python中有什么价值?
请考虑Python中的以下数据帧: 数据框架 可乐 马驹 可乐 1. 狗 439 1. 猫 932 1. 青蛙 932 2. 狗 2122 2. 猫 454 2. 青蛙 773 3. 狗 9223 3. 猫 3012 3. 青蛙 898如何将一列除以另一列,其中一个数据帧';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
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