2016-02-22 3 views
2

У меня есть DataFrame, Foo:Панды: как проверить, что топ-н-dataframe действительно является результатом оригинального dataframe

 A B C D E 
    0 50 46 18 65 55 
    1 48 56 98 71 96 
    2 99 48 36 79 70 
    3 15 24 25 67 34 
    4 77 67 98 22 78 

и другой Dataframe, бар, который содержит наибольшее 2 значения каждой строки обув , Все остальные значения были заменены нулями, чтобы создать разреженность:

 A B C D E 
    0 0 0 0 65 55 
    1 0 0 98 0 96 
    2 99 0 0 79 0 
    3 0 0 0 67 34 
    4 0 0 98 0 78 

Как я могу проверить, что каждая строка в строке действительно содержит требуемые значения?

еще одно: Решение должно работать с большими DateFrames т.е. 20000 X 20000.

ответ

0

Очевидно, что вы можете сделать это с зацикливание и эффективной сортировки, но, возможно, лучше всего было бы:

n = foo.shape[0] 

#Test1: 
#bar dataframe has original data except zeros for two values: 
diff = foo - bar 
test1 = ((diff==0).sum(axis=1) == 2) == n 

#Test2: 
#bar dataframe has 3 zeros on each line 
test2 = ((bar==0).sum(axis=1) == 3) == n 

#Test3: 
#these 2 numbers that bar has are the max 
bar2=bar.replace({0:pandas.np.nan(), inplace=True} 
#the max of remaining values is smaller than the min of bar: 
row_ok = (diff.max(axis=1) < bar.min(axis=1)) 
test3 = (ok.sum() == n) 

Я думаю, что это охватывает все случаи, но не проверил все это ...