如何将一列除以另一列,其中一个数据框的列值对应于 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
考虑 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