python - 在 pandas DataFrame 上应用函数,2 个循环,其中外循环是轴 = 1,内循环是轴 = 0
问题描述
我是 Python 新手,遇到了问题。请只指出正确的方向,而不是告诉我答案。
df =
idx A B
0 21 45
1 43 76
2 32 67
3 92 55
4 11 82
对于 A 中的每一行,我想找到该元素与 B 中的所有元素之间的差异。然后移动到 A 的下一行,并再次找到该元素与 B 中的所有元素之间的差异,依此类推。
请给我一些关于如何解决这个问题的想法。先感谢您。
乔
解决方案
您可以使用 numpy 广播功能来执行此操作,如下所示
- df.A.values 和 df.B.values 给出每列的 numpy 数组
- (df.A.values - df.B.values[:,np.newaxis]) 将给出 A 和 B 中每对值之间的差异作为矩阵
pd.DataFrame((df.A.values - df.B.values[:,np.newaxis]),
columns = [f"diff_{val}" for val in df.A])
结果
diff_21 diff_43 diff_32 diff_92 diff_11
0 -24 -2 -13 47 -34
1 -55 -33 -44 16 -65
2 -46 -24 -35 25 -56
3 -34 -12 -23 37 -44
4 -61 -39 -50 10 -71
推荐阅读
- android-studio - 如何从所有版本的android设备中的电话簿联系人中获取电子邮件地址
- antd - form.setFieldsValue 将 isFieldsTouched 设置为 True
- pine-script - 如何获取窗口中当前显示的柱的最后一个柱索引?
- java - Android - 具有最小化应用程序的 AsyncTask - 重新启动?
- sql-server - 将相关子查询重写为 CROSS APPLY
- mysql - 我如何通过不提及完整的字符串来编写查询以获取列中的值
- symfony - 如何在 Symfony 5 中使用 ParamConverter 将请求中的数组分配给类属性
- batch-file - 如果我在同一个文件夹中多次使用这个批处理脚本会覆盖旧的 txt 文件吗?
- manim - 是否可以在 ImageMobject 的渲染中禁用插值?
- python - 如何在 API 调用中安全地发送用户数据