python - 如何用另一列中的每个值减去列值(熊猫)
问题描述
我有两列 A 和 B。我想用 A 列中的每个值减去 B 列值,并在不使用 for 循环的情况下创建一个新列。
下面是我的数据框
A B
0 5 3
1 3 2
2 8 1
期望的输出
A B C D E
0 5 3 2 3 4
1 3 2 0 1 2
2 8 1 5 6 7
C = A - B[0]
D = A - B[1]
E = A - B[2]
解决方案
使用 numpy 的数组广播:
df = pd.DataFrame({'A':[5, 3, 8],
'B':[3, 2, 1]})
df2 = pd.DataFrame(df['A'].values[:, None] - df['B'].values, columns=['C', 'D', 'E'])
df = df.join(df2)
结果:
A B C D E
0 5 3 2 3 4
1 3 2 0 1 2
2 8 1 5 6 7
说明:
>>> df['A'].values[:, None]
array([[5],
[3],
[8]])
>>> df['B'].values
array([3, 2, 1])
减去它们时,numpy“延伸”df['A'].values[:, None]
到:
array([[5, 5, 5],
[3, 3, 3],
[8, 8, 8]])
并df['B'].values
:
array([[3, 2, 1],
[3, 2, 1],
[3, 2, 1]])
减法的结果是:
array([[2, 3, 4],
[0, 1, 2],
[5, 6, 7]])
推荐阅读
- r - 与州空间数据框不同,创建县空间数据框会生成单行数据框作为输出
- matplotlib - xlsxwriter:如何加载使用 matplotlib.pyplot 创建的 BytesIO png 文件
- aws-cli - 将 aws cli SES 作为文件附件发送
- php - 无法在 PHP 中输出 JSON 数据数组
- firebase - 基于其他文档的 Firestore 安全规则
- java - 循环双向链表 indexOf 和删除函数不正确
- python-3.x - 使用 CustomJS 向散景图添加交互式图块
- python - 如何在 GtkPrintOperation 中设置自定义页面大小?
- python - Seaborn 和 Matplotlib 添加相对于轴的文本
- sql - 一个子属性(外键)存储了来自同一个表的两列的数据