【发布时间】:2018-03-17 09:21:48
【问题描述】:
我经常在pandas做这样的事情:
s2 = s1.groupby(level=1).sum()
s2 = s2[s2>25]
换句话说,我做了一些groupby 操作,然后只想保留满足结果的某些条件的结果。
有没有办法在一行中处理?更具体地说,是否可以在不创建系列然后在第二步中进行布尔选择的情况下做到这一点?
【问题讨论】:
标签: python pandas group-by pandas-groupby
我经常在pandas做这样的事情:
s2 = s1.groupby(level=1).sum()
s2 = s2[s2>25]
换句话说,我做了一些groupby 操作,然后只想保留满足结果的某些条件的结果。
有没有办法在一行中处理?更具体地说,是否可以在不创建系列然后在第二步中进行布尔选择的情况下做到这一点?
【问题讨论】:
标签: python pandas group-by pandas-groupby
.loc + lambda
系列
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
数据输入
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]})
【讨论】:
假设s1 是pandas.Series
level 传递给pd.Series.sum
pd.Series.compress 很方便s2.sum(level=1).compress(lambda s: s.gt(25))
假设s1 是pandas.DataFrame
并且有一个列名'col'
s.sum(level=1).query('col > 25')
【讨论】: