首页 > 解决方案 > 在 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 中的所有元素之间的差异,依此类推。

请给我一些关于如何解决这个问题的想法。先感谢您。

标签: pythonpython-3.xpandasdataframe

解决方案


您可以使用 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

推荐阅读