Pandas的分组和布尔选择

5

我经常会在 pandas 中做这样的事情:

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

简而言之,我进行了一些 groupby 操作,然后想要仅保留符合某些条件的结果。

有没有一种方法可以在一行代码中完成?更具体地说,是否可以在不创建系列并在第二步进行布尔选择的情况下完成此操作?

2个回答

9
假设 s1 是一个 pandas.Series
  1. 您可以将 level 传递给 pd.Series.sum
  2. pd.Series.compress 很方便

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

假设 s1 是一个 pandas.DataFrame,并且有一列名为 'col'
s.sum(level=1).query('col > 25')

寻找一种新的方式 :-) - BENY
3
你们两位的回答在这个问题中提供了许多有用的知识。 - cs95

6

.loc + lambda

Serise

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

Dataframe

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

数据输入

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]})

有趣,以前没见过。在这里找到了文档:https://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-callable - itzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接