2015-11-05 150 views
3

之間的比較我如何執行DataFrame和Series之間的比較?我想隱藏DataFrame/Series中比另一個DataFrame/Series中的元素更大/更小的元素。大於/小於Pandas DataFrames/Series

例如,下列不替換NaN的元素比平均 更大,雖然我也期待:

>>> x = pd.DataFrame(data={'a': [1, 2], 'b': [3, 4]}) 
>>> x[x > x.mean(axis=1)] = np.nan 
>>> x 
    a b 
0 1 3 
1 2 4 

如果我們看一下通過比較產生的布爾數組,這是真的奇怪:

>>> x = pd.DataFrame(data={'a': [1, 2], 'b': [3, 4]}) 
>>> x > x.mean(axis=1) 
     a  b  0  1 
0 False False False False 
1 False False False False 

我不明白什麼邏輯產生的布爾數組是這樣的。我能夠通過使用轉來解決此問題:

>>> (x.T > x.mean(axis=1).T).T 
     a  b 
0 False True 
1 False True 

但我相信有這樣做的,我是不知道的一些「正確」的方式。至少我想知道發生了什麼。

回答

1

這裏的問題是,它的解釋索引列的值進行比較,如果你使用.gt並通過axis=0,那麼你得到的結果,你的願望:

In [203]: 
x.gt(x.mean(axis=1), axis=0) 

Out[203]: 
     a  b 
0 False True 
1 False True 

你可以明白我的意思,當在執行與NP陣列的比較:

In [205]: 
x > x.mean(axis=1).values 

Out[205]: 
     a  b 
0 False False 
1 False True 

這裏可以看到,用於比較的默認軸是在柱上,從而導致不同的結果

+0

太棒了,這正是我一直在尋找的!我認爲會有這種功能,但我無法通過Google搜索找到,我必須說'gt'和'lt'的文檔不是很有幫助。謝謝! –