2014-03-28 39 views
10

我有一個數據框中有字符 - 我想要一個布爾結果的行告訴我,如果該行的所有列都具有相同的值。熊貓Dataframe查找行所有列等於

例如,我有

df = [ a b c d 

0 'C' 'C' 'C' 'C' 

1 'C' 'C' 'A' 'A' 

2 'A' 'A' 'A' 'A' ] 

和我想要的結果是

0 True 

1 False 

2 True 

我。所有嘗試,但似乎我只能檢查,如果一切都等於一個字母。我能想到的唯一方法就是在每一行上做一個獨特的,看看它是否等於1?提前致謝。

回答

14

我覺得最徹底的方法是使用情商要檢查的第一列中的所有列:

In [11]: df 
Out[11]: 
    a b c d 
0 C C C C 
1 C C A A 
2 A A A A 

In [12]: df.iloc[:, 0] 
Out[12]: 
0 C 
1 C 
2 A 
Name: a, dtype: object 

In [13]: df.eq(df.iloc[:, 0], axis=0) 
Out[13]: 
     a  b  c  d 
0 True True True True 
1 True True False False 
2 True True True True 

現在你可以使用所有的(如果他們都是平等的第一個項目,他們都是平等的):

In [14]: df.eq(df.iloc[:, 0], axis=0).all(1) 
Out[14]: 
0  True 
1 False 
2  True 
dtype: bool 
+0

這對我和我來說似乎是最直觀的我去的方式。謝謝。 –

2
df = pd.DataFrame.from_dict({'a':'C C A'.split(), 
         'b':'C C A'.split(), 
         'c':'C A A'.split(), 
         'd':'C A A'.split()}) 
df.apply(lambda x: len(set(x)) == 1, axis=1) 
0  True 
1 False 
2  True 
dtype: bool 

說明:組(x)的只有1個元件,如果行中的所有元素是相同的。軸= 1選項將相反的行應用於任何給定的函數。