Groupby 一列并计算另一列的条件?

Posted

技术标签:

【中文标题】Groupby 一列并计算另一列的条件?【英文标题】:Groupby one column and count another column with a condition? 【发布时间】: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 :)

【问题讨论】:

【参考方案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 毫秒

以上是关于Groupby 一列并计算另一列的条件?的主要内容,如果未能解决你的问题,请参考以下文章

Groupby 一列并根据 R 中的字符串向量重新排列另一列字符串

根据另一列计算 groupby 中的百分比

在包含记录的现有表中,如何创建一个新的 datetime2(2) 列并使用基于另一列的值填充它?

如何通过另一列的值 pandas 聚合 groupBy [重复]

在 DataFrame.groupby 的情况下,如何根据另一列的最大值获取列的值

Pandas Multiindex Groupby 聚合列与另一列的值