【问题标题】:Filter outcome from pandas.groupby on same line在同一行从 pandas.groupby 过滤结果
【发布时间】:2019-08-06 00:52:58
【问题描述】:

如何在一行中根据groupby转换的输出过滤数据框。

到目前为止,我得到了以下可行的方法,但我想知道是否有更简单/更有效的方法。

import pandas as pd

df = pd.DataFrame({'A': ['one', 'one', 'two', 'two'], 'B': [1, 1, 6, 6]})

df.groupby('A').filter(lambda x: x['B'].sum()>10).groupby('A').B.sum()

提前致谢。

【问题讨论】:

    标签: python pandas filter pandas-groupby


    【解决方案1】:

    这是一种方法

    df.groupby('A').sum().loc[lambda x : x['B']>10]
    Out[251]: 
          B
    A      
    two  12
    

    【讨论】:

      【解决方案2】:

      让我们使用query 来提高可读性:

      df.groupby('A').sum().query('B > 10')
      

      输出:

            B
      A      
      two  12
      

      【讨论】:

        【解决方案3】:

        另一种不可读但相当高效的方式:

        df[(lambda a, b: np.bincount(a, b)[a] >= 10)
             (df.A.factorize()[0], df.B.values)].groupby('A').sum()
        

             B
        A      
        two  12
        

        【讨论】:

          猜你喜欢
          • 2019-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 1970-01-01
          • 2022-06-13
          相关资源
          最近更新 更多