我有两个pandas数据框,A和B。
A是1000行x500列,填充了二进制值,指示存在或不存在。
B是1024行x10列,并且是0和1的完整迭代,因此有1024行。
我试图找出在A的特定10列中,哪些行与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,2,3,4,5,6,7,8,9,10)
上的行 (1,0,1,0,1,0,0,1,0,0)
进行匹配。
我希望对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
这个例子看起来不是太糟糕,但我在一个 while 循环中使用了它,而该循环大约运行了 20,000 次;因此,它会使程序变慢。
我一直在尝试使用 DataFrame.apply,但无法取得成功。可能 map 函数能更好地发挥作用?
我只是希望有人能看到更有效率的方法,因为我对 Python 还比较新。
谢谢,祝好!
groupby
。 - Victor ChubukovA.groupby(column_list).apply(my_entropy_function)
。请参考http://pandas.pydata.org/pandas-docs/stable/groupby.html。 - Victor Chubukov