python - 对从一个 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 执行此操作的最佳方法是什么?
提前致谢!
解决方案
广播是要走的路:
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
推荐阅读
- javascript - 事件 JavaScript
- python - 发送带有附加 .ods 文件的电子邮件
- .net - Process.Start vsix-file 从扩展名。已安装错误
- jmeter - OBIEE 应用程序的性能测试?
- javascript - Javascript — GraphQL 从 API 调用返回 null
- c# - 如何在不使用支持字段的情况下在首次访问时实例化属性?
- c++ - 在单元测试项目中包含 .c 文件并从多个 cpp 文件中访问它而不会出现链接问题
- android - 方向布局教程不完整
- java - 找不到 int io.realm.internal.OsSharedRealm.nativeGetRealmPrivileges (long) 的实现
- java - jdbc 驱动程序仅在使用内存时有效