【问题标题】:How would I groupby and see if all members of the group meet a certain condition?我将如何分组并查看该组的所有成员是否满足特定条件?
【发布时间】:2022-08-05 22:04:23
【问题描述】:

我想groupby,看看组中的所有成员是否都满足某个条件。这是一个虚拟示例:

x = [\'Mike\',\'Mike\',\'Mike\',\'Bob\',\'Bob\',\'Phil\']
y = [\'Attended\',\'Attended\',\'Attended\',\'Attended\',\'Not attend\',\'Not attend\']

df = pd.DataFrame({\'name\':x,\'attendance\':y})

我想要做的是返回一个 3x2 数据框,显示每个名字,谁总是出席。它应该如下所示:

new_df = pd.DataFrame({\'name\':[\'Mike\',\'Bob\',\'Phil\'],\'all_attended\':[True,False,False]})

最好的方法是什么?

非常感谢。

    标签: python pandas


    【解决方案1】:

    我们试试看

    out = (df['attendance'].eq('Attended')
           .groupby(df['name']).all()
           .to_frame('all_attended').reset_index())
    
    print(out)
    
       name  all_attended
    0   Bob         False
    1  Mike          True
    2  Phil         False
    

    【讨论】:

    • 感谢您指出all +1。很好的尝试。
    【解决方案2】:

    一种方法可能是:

    df.groupby('name')['attendance'].apply(lambda x: True if x.unique().all()=='Attended' else False)
    
    name
    Bob     False
    Mike     True
    Phil    False
    Name: attendance, dtype: bool
    

    【讨论】:

      【解决方案3】:

      对于不需要是字符串的数据,我会说远离字符串:

      z = [s == 'Attended' for s in y]
      df = pd.DataFrame({'name': x, 'attended': z})
      

      现在您可以检查给定组的所有元素是否为 True:

      >>> df.groupby('name')['attendance'].all()
      name
      Bob     False
      Mike     True
      Phil    False
      Name: attendance, dtype: bool
      

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多