2016-01-24 36 views
1

工作後行,我設法簡化數據框,看起來像下面這樣:返回只有類別的所有物品都是真

Category | Boolean 
A | True 
A | True 
A | False 
B | True 
B | True 
C | True 
C | True 
B | False 
D | True 
C | True 

現在,我想獲得哪些類別的行只有真在'布爾'列中。另一種說法是:僅返回給定類別的行True僅存在於'布爾'列中。

從例如DF以上,我將尋求獲得:

Category | Boolean 
C | True 
C | True 
D | True 
C | True 

與A類或B沒有行應返回,因爲這一類的行中的至少一個有假。但是,因爲對於類別C和D,所有行都爲真,我們應該返回包含這些類別的所有行。

在我的真實數據框中有更多的列,但沒有一個是唯一的,它們都不與切片相關。如果你確實需要一個額外的解決方案列,請編輯一個,而不是使用索引,如果可能但不是必需的。

希望它很清楚。先謝謝你!

回答

0

假設你Boolean列D型bool(而不是字符串)真的,你可以使用groupbytransform

>>> df.loc[df.groupby("Category")["Boolean"].transform(all)] 
    Category Boolean 
5  C True 
6  C True 
8  D True 
9  C True 

它的作品,因爲我們有

>>> df.groupby("Category")["Boolean"].all() 
Category 
A False 
B False 
C  True 
D  True 
Name: Boolean, dtype: bool 

等等

>>> df.groupby("Category")["Boolean"].transform(all) 
0 False 
1 False 
2 False 
3 False 
4 False 
5  True 
6  True 
7 False 
8  True 
9  True 
Name: Boolean, dtype: bool 
+0

它的工作原理謝謝你!請問什麼是「變形」方法?我無法在熊貓或numpy文檔上找到它。 – Anderson

+0

@Anderson:'transform'獲取groupby的結果並將其「廣播」回原始數據幀的索引。它在['groupby']的介紹中進行了解釋(http://pandas.pydata.org/pandas-docs/stable/groupby.html)。 – DSM

相關問題