Python 查找一个数据帧中每行前n个值,并使用这些索引获取另一个数据帧中的值,以执行成对操作

Python 查找一个数据帧中每行前n个值,并使用这些索引获取另一个数据帧中的值,以执行成对操作,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,在本例中,我有两个数据帧A和B c1 c2 c3 c1 c2 c3 r0 7 6 4 r0 0 0 1 r1 6 2 5 r1 1 1 0 r2 3 5 9 r2 1 0 1 A是左侧的数据帧,B是右侧的数据帧 基本上,我的目标是在A的每一行中找到

在本例中,我有两个数据帧A和B

      c1  c2   c3              c1      c2     c3 
r0    7    6    4       r0      0       0      1
r1    6    2    5       r1      1       1      0
r2    3    5    9       r2      1       0      1
A是左侧的数据帧,B是右侧的数据帧

基本上,我的目标是在A的每一行中找到前2个值,在B中找到对应的行值,然后取这些对的乘积之和

例如,在第一行中,A中的顶部值是7和6,它们对应于B的第一行中的0,0。然后我想返回7*0+6*0=0。我希望对每一行执行此操作,并返回如下内容:

d1   0
d2   6
d3   9
我目前正在使用一个实现,使用numpy argsort查找A的每一行中前n个值的索引,然后使用map和自定义函数遍历行并查找乘积和

这种方法对我来说太慢了,所以我想知道是否有更快的替代方法。谢谢。

用于获取前2个值,并将其用作
B
的掩码

In [1311]: (A*B.where(A.rank(axis=1) >= 2)).sum(axis=1)
Out[1311]:
r0    0.0
r1    6.0
r2    9.0
dtype: float64

细节

In [1314]: A.rank(axis=1)
Out[1314]:
     c1   c2   c3
r0  3.0  2.0  1.0
r1  3.0  1.0  2.0
r2  1.0  2.0  3.0

In [1315]: A.rank(axis=1) >=2
Out[1315]:
       c1     c2     c3
r0   True   True  False
r1   True  False   True
r2  False   True   True

In [1317]: B.where(A.rank(axis=1) >= 2)
Out[1317]:
     c1   c2   c3
r0  0.0  0.0  NaN
r1  1.0  NaN  0.0
r2  NaN  0.0  1.0

In [1318]: (A*B.where(A.rank(axis=1) >= 2))
Out[1318]:
     c1   c2   c3
r0  0.0  0.0  NaN
r1  6.0  NaN  0.0
r2  NaN  0.0  9.0

正如预期的那样工作,它比我的实现快得多。谢谢你的帮助!接下来,如果我想把a和B的每一行传递给一个函数,而不是求和,那么最好的方法是什么?在做了掩蔽之后,我希望像myfunc(Arow,Brow)这样的东西在A的每一行和B中对应的行上运行。