python – 比较两个pandas数据帧的行的最快方法?

所以我有两个pandas数据帧,A和B.

A是1000行×500列,填充有表示存在或不存在的二进制值.

B是1024行×10列,并且是0和1的完整迭代,因此具有1024行.

我试图找到A中特定10列的A中的哪些行与B中的给定行相对应.我需要整行匹配,而不是逐个元素.

例如,我想要

A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)==(1,0,1,0,1,0,0,1,0,0)).all(axis=1)]

返回A中的行(3,5,8,11,15)与那些特定列的B(1,0,1,0,1,0,0,1,0,0)行匹配的内容(1,2,3,4,5,6,7,8,9,10)

我想在B的每一行都这样做.
我能想到的最好方法是:

import numpy as np
for i in B:
    B_array = np.array(i)
    Matching_Rows = A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)] == B_array).all(axis=1)]
    Matching_Rows_Index = Matching_Rows.index

对于一个实例来说这并不可怕,但我在一个运行大约20,000次的while循环中使用它;因此,它减慢了相当多的速度.

我一直在乱用DataFrame.apply无济于事.地图工作能更好吗?

我只是希望有人看到一些显然更高效的东西,因为我对python很新.

谢谢和最好的问候!

解决方法:

您可以将mergereset_index一起使用 – 输出是B的索引,它们在自定义列中的A中相等:

A = pd.DataFrame({'A':[1,0,1,1],
                  'B':[0,0,1,1],
                  'C':[1,0,1,1],
                  'D':[1,1,1,0],
                  'E':[1,1,0,1]})

print (A)
   A  B  C  D  E
0  1  0  1  1  1
1  0  0  0  1  1
2  1  1  1  1  0
3  1  1  1  0  1

B = pd.DataFrame({'0':[1,0,1],
                  '1':[1,0,1],
                  '2':[1,0,0]})

print (B)
   0  1  2
0  1  1  1
1  0  0  0
2  1  1  0
print (pd.merge(B.reset_index(), 
                A.reset_index(), 
                left_on=B.columns.tolist(), 
                right_on=A.columns[[0,1,2]].tolist(),
                suffixes=('_B','_A')))

   index_B  0  1  2  index_A  A  B  C  D  E
0        0  1  1  1        2  1  1  1  1  0
1        0  1  1  1        3  1  1  1  0  1
2        1  0  0  0        1  0  0  0  1  1    

print (pd.merge(B.reset_index(), 
                A.reset_index(), 
                left_on=B.columns.tolist(), 
                right_on=A.columns[[0,1,2]].tolist(),
                suffixes=('_B','_A'))[['index_B','index_A']])    

   index_B  index_A
0        0        2
1        0        3
2        1        1   

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...