【问题标题】:Groupby one column and count another column with a condition?Groupby 一列并计算另一列的条件?
【发布时间】:2019-10-07 00:58:08
【问题描述】:

我想知道是否可以在计算满足条件的另一列的值时对一列进行分组。因为我的数据集有点奇怪,所以我创建了一个类似的:

import pandas as pd

raw_data = {'name': ['John', 'Paul', 'George', 'Emily', 'Jamie'], 
            'nationality': ['USA', 'USA', 'France', 'France', 'UK'],     
            'books': [0, 15, 0, 14, 40]}  
df = pd.DataFrame(raw_data, columns = ['name', 'nationality', 'books'])

假设,我想按国籍分组并计算没有来自该国家/地区的任何书籍(书籍 == 0)的人数。

因此,我希望输出类似于以下内容:

nationality
USA      1
France   1
UK       0

我尝试了 groupby 的大多数变体,使用过滤器、agg,但似乎没有得到任何有效的方法。

提前致谢, BBQuercus :)

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    IIUC:

    df.books.eq(0).astype(int).groupby(df.nationality).sum()
    
    nationality
    France    1
    UK        0
    USA       1
    Name: books, dtype: int64
    

    【讨论】:

      【解决方案2】:

      用途:

      df.groupby('nationality')['books'].apply(lambda x: x.eq(0).any().astype(int))
      

      nationality
      France    1
      UK        0
      USA       1
      Name: books, dtype: int64
      

      【讨论】:

      • 我刚刚检查了我的整个数据集(大约 10'000 个值)// piRSquared – CPU 时间:用户 7.35 毫秒,系统:1.71 毫秒,总计:9.05 毫秒挂壁时间:9.52 毫秒 // anky_91 – CPU 时间:用户 34.2 毫秒,系统:2.72 毫秒,总计:37 毫秒挂壁时间:42.4 毫秒
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2018-12-09
      • 2021-09-13
      • 2019-08-27
      相关资源
      最近更新 更多