首页 > 解决方案 > Pandas - 在过滤的数据帧上应用聚合

问题描述

GroupBy 一列并聚合过滤值中的一列。

就像在下面给出的示例中一样,我想计算每种“种类”动物的性别“雄性”动物的数量

import pandas as pd
df = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],
                'height': [9.1, 6.0, 9.5, 34.0],
                'gender': ['male', 'female', 'female', 'female']})
df.groupby('kind').agg({'height': 'min', 'gender': lambda g: (g == 'male').count()})

我得到的输出(这是错误的)

kind      height     gender
cat       9.1        2
dog       6.0        2

预期输出:

kind      height     gender
cat       9.1        1
dog       6.0        0

标签: pythonpandas

解决方案


您可以使用 sum() 代替 count()。

df.groupby('kind').agg({'height': 'min', 'gender': lambda g: (g == 'male').sum()})

推荐阅读