代码之家  ›  专栏  ›  技术社区  ›  itzy

pandas groupby和布尔选择

  •  5
  • itzy  · 技术社区  · 8 年前

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

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

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

    有没有办法做到一行?更具体地说,是否可以在不创建序列的情况下执行此操作,然后在第二步中执行布尔选择?

    2 回复  |  直到 8 年前
        1
  •  9
  •   piRSquared    8 年前

    假设 s1 是一个 pandas.Series

    1. 你可以通过 level pd.Series.sum
    2. pd.Series.compress

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

    假设 是一个 pandas.DataFrame
    还有一个列名 'col'

    s.sum(level=1).query('col > 25')
    
        2
  •  6
  •   BENY    8 年前

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