2017-10-05 144 views
3

我常常最終會做這樣的事情在pandas大熊貓GROUPBY和布爾選擇

s2 = s1.groupby(level=1).sum() 
s2 = s2[s2>25] 

在的話,我做了一些groupby操作,然後只保留滿足的結果一定條件下的結果。

在一行中有辦法嗎?更具體地說,是否可以在不創建系列的情況下執行此操作,然後在第二步中執行布爾選擇?

回答

3

.loc + lambda

SERISE

df.groupby('name').a.sum().loc[lambda x: x>20] 
Out[492]: 
name 
Chn  84 
Fra 165 
Ind  71 

數據框中

df.groupby('name').a.sum().to_frame().loc[lambda x: x['a']>20] 
Out[490]: 
     a 
name  
Chn 84 
Fra 165 
Ind 71 

DataInput中的

df=pd.DataFrame({'name':['Ind','Chn','SG','US','SG','US','Ind','Chn','Fra','Fra'],'a':[5,6,3,4,7,12,66,78,65,100]}) 
+0

有趣,以前沒見過這個。在這裏找到文檔:https://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-callable – itzy

+0

@itzy cheers〜:) – Wen

7

假設s1pandas.Series

  1. 你可以通過levelpd.Series.sum
  2. pd.Series.compress是得心應手

s2.sum(level=1).compress(lambda s: s.gt(25)) 

假設s1pandas.DataFrame
,並且有一個列名'col'

s.sum(level=1).query('col > 25') 
+0

壓縮....謝謝你,PIR ** 2,補充說,我的工具包。 –

+0

尋找新的方法:-) – Wen

+3

你們都回答了這個問題中的一些瘋狂的知識炸彈。 (Y) –