python - 如何将一列除以另一列,其中一个数据框的列值对应于 Python Pandas 中另一个数据框的列值?
问题描述
考虑 Python Pandas 中的以下数据框:
数据框A
可乐 | ColB | 科尔C |
---|---|---|
1 | 狗 | 439 |
1 | 猫 | 932 |
1 | 青蛙 | 932 |
2 | 狗 | 2122 |
2 | 猫 | 454 |
2 | 青蛙 | 773 |
3 | 狗 | 9223 |
3 | 猫 | 3012 |
3 | 青蛙 | 898 |
数据框B
寒冷的 | 油菜 |
---|---|
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
推荐阅读
- php - 上传PNG图像是黑色背景
- javascript - 学习基础 --- 在 Javascript 中提取扩展
- git - 从 git 中删除大文件
- javascript - 如何在使用更新的依赖值调度操作后更新 api 调用
- c# - 创建新实例时崩溃(Microsoft.Office.Interop.Excel)
- angular - 将额外属性映射到 Angular http 响应中的模型
- excel - 将 Excel 单元格中的单词拆分为单独的列
- r - 基于最后一位的子集 M3 MCOMP
- javascript - 在函数内部使用时增加对 return 关键字的理解
- r - 您是否需要对文本进行标记以可视化来自 LDA 主题模型的数据?