按一个列进行分组并统计满足条件的另一个列的数量?

6

我想知道在满足条件的情况下,是否可以按照一列进行分组,同时统计另一列的值。由于我的数据集有点奇怪,所以我创建了一个类似的数据集:

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的大多数变体,使用了filter和agg,但似乎都没有得到有效的结果。

提前感谢, BBQuercus :)

2个回答

7

IIUC:

df.books.eq(0).astype(int).groupby(df.nationality).sum()

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

4

使用:

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

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

1
我刚刚检查了整个数据集(大约10,000个值) // piRSquared - CPU时间:用户7.35毫秒,系统1.71毫秒,总计9.05毫秒 墙上时间:9.52毫秒 // anky_91 - CPU时间:用户34.2毫秒,系统2.72毫秒,总计37毫秒 墙上时间:42.4毫秒 - BBQuercus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接