首页 > 解决方案 > 对从一个 df 到另一行的大量行执行操作的最佳方法是什么?

问题描述

如果我有df1:


    A     B      C     D
0   4.51  6.212  3.12  1
1   3.12  3.444  1.12  1
2   6.98  7.413  7.02  0
3   4.51  8.916  5.12  1
....
n1 ~ 2000

和 df2

    A     B      C     D
0   4.51  6.212  3.12  1
1   3.12  3.444  1.12  1
2   6.98  7.413  7.02  0
3   4.51  8.916  5.12  1
....
n2 = 10000+

并且必须执行如下操作:

df12 = 

df1[0,A]-df2[0,A]     df1[0,B]-df2[0,B]     df1[0,C]-df2[0,C]....
df1[0,A]-df2[1,A]     df1[0,B]-df2[1,B]     df1[0,C]-df2[1,C]
...
df1[0,A]-df2[n2,A]    df1[0,B]-df2[n2,B]    df1[0,C]-df2[n2,C]
...
df1[1,A]-df2[0,A]     df1[1,B]-df2[0,B]     df1[1,C]-df2[0,C]....
df1[1,A]-df2[1,A]     df1[1,B]-df2[1,B]     df1[1,C]-df2[1,C]
...
df1[1,A]-df2[n2,A]    df1[1,B]-df2[n2,B]    df1[1,C]-df2[n2,C]
...
df1[n1,A]-df2[0,A]    df1[n1,B]-df2[0,B]    df1[n1,C]-df2[0,C]....
df1[n1,A]-df2[1,A]    df1[n1,B]-df2[1,B]    df1[n1,C]-df2[1,C]
...
df1[n1,A]-df2[n2,A]   df1[n1,B]-df2[n2,B]   df1[n1,C]-df2[n2,C]

将 df1 中的每一行与 df2 中的每一行进行比较,从而产生一个分数。

使用 pandas 或 vaex/equivalent 执行此操作的最佳方法是什么?

提前致谢!

标签: pythonpandas

解决方案


广播是要走的路:

pd.DataFrame((df1.to_numpy()[:,None] - df2.to_numpy()[None,...]).reshape(-1, df1.shape[1]),
             columns = df2.columns,
             index = pd.MultiIndex.from_product((df1.index,df2.index))
            )

输出(对于df1前三行,df2前两行):

        A      B    C    D
0 0  0.00  0.000  0.0  0.0
  1  1.39  2.768  2.0  0.0
1 0 -1.39 -2.768 -2.0  0.0
  1  0.00  0.000  0.0  0.0
2 0  2.47  1.201  3.9 -1.0
  1  3.86  3.969  5.9 -1.0

推荐阅读