【问题标题】:pandas groupby and boolean selection熊猫 groupby 和布尔选择
【发布时间】:2018-03-17 09:21:48
【问题描述】:

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

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

换句话说,我做了一些groupby 操作,然后只想保留满足结果的某些条件的结果。

有没有办法在一行中处理?更具体地说,是否可以在不创建系列然后在第二步中进行布尔选择的情况下做到这一点?

【问题讨论】:

    标签: python pandas group-by pandas-groupby


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    假设s1pandas.Series

    1. 您可以将level 传递给pd.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')
    

    【讨论】:

    • 寻找新方法 :-)
    • 你们的回答都在这个问题上丢了一些疯狂的知识炸弹。 (Y)
    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2021-06-16
    • 2013-10-24
    • 2013-06-06
    • 2019-01-18
    • 2020-09-08
    • 2019-02-24
    相关资源
    最近更新 更多