【发布时间】:2019-06-11 01:43:08
【问题描述】:
我有一个像这样的 Pandas 数据框df1:
ID col1 col2 col3
0 A 1 1 1
1 B 1 1 1
2 C 1 0 1
3 D 0 0 0
4 E 1 1 1
5 F 0 1 0
6 G 1 0 0
7 H 0 1 0
和另一个数据框df2 像这样:
ID col1 col2 col3 rating1 rating2
0 I 0 1 0 1 2
1 J 0 1 1 3 1
2 K 1 0 0 4 4
3 L 0 1 0 2 2
我需要找到df1 的每一行(ID 除外)与df2 中的相应行之间的相似性(x==y).sum(不是按位异或),并将该相似性用作计算平均值的权重df1 中所有 ID 的评分。
例如:
A 的最终评分应计算为:
rating1[A] = ( 1*1 + 2*3 + 1*4 + 1*2 ) / (1 + 2 + 1 + 1) = 13/5
在使用 df2 计算评分的相似性平均值后,我的输出应该是另一个数据框,其中包含 df1 中所有 ID 的评分。
输出数据框:
ID rating1 rating2
0 A 13/5 2
1 B 13/5 2
... and so on till ID H
请帮助我使用 pandas 函数有效地做到这一点。我尝试通过遍历所有行来做到这一点,但 df1 和 df2 都是非常大的表,而且需要很多时间。
提前致谢。
更新
@WeNYoBen 的回答是正确的。尽管在我的例子中,df1 和 df2 的尺寸比我在这里作为示例显示的要高得多。
在第三行(@WeNYoBen 的回答)中,s 的尺寸将是 len(df1)*len(df2),在我的情况下它们都很大,并给我一个 MemoryError。是否有任何解决方法,从某种意义上说,我可以将df2 拆分为更小的部分并可以单独计算它们?
再次感谢。
【问题讨论】:
-
我认为 A 和 B 应该有相同的评级吧?因为它们在 df1 中具有相同的值
-
是的,检查更新版本。感谢您指出@WeNYoBen
标签: python pandas dataframe vector matrix-multiplication