[英]How to divide one column by another where one dataframe's column value corresponds to another dataframe's column's value in Python Pandas?
Consider the following data frames in Python Pandas:考虑 Python Pandas 中的以下数据帧:
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 ![]() |
ColD![]() |
ColE![]() |
---|---|
1 ![]() |
101 ![]() |
2 ![]() |
314 ![]() |
3 ![]() |
124 ![]() |
To note, ColB just repeats it's string values as ColA iterates upwards.需要注意的是,ColB 只是在 ColA 向上迭代时重复它的字符串值。 ColC and ColE are random.
ColC 和 ColE 是随机的。 ColA and ColD correspond.
ColA 和 ColD 对应。 ColD values will never have repeats (like a map).
ColD 值永远不会有重复(如地图)。
I want to divide ColC by ColE wherever ColA == ColD and ideally put the resulting value in a new column in DataframeA (or just have it overwrite ColC).我想在 ColA == ColD 的任何地方将 ColC 除以 ColE ,理想情况下将结果值放在 DataframeA 的新列中(或者只是让它覆盖 ColC)。 The resulting value should be able to have decimals.
结果值应该能够有小数。
How can I do this in Python Pandas?如何在 Python Pandas 中执行此操作?
IIUC, you can merge and then divide, just for a new df use below else use @Manakin's answer . IIUC,您可以合并然后划分,仅用于下面的新 df 使用,否则使用@Manakin's answer 。
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
you can use .map
你可以使用
.map
if you have multiple keys to join on then merge
would be more useful as demonstrated by @anky如果您有多个键要加入,那么
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.