按一列分组,并根据过滤后的值汇总其中一列。
就像下面的示例一样,我想为每种“种类”的动物计算性别为“雄性”的动物的数量
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
答案 0 :(得分:5)
您可以使用sum()代替count()。
df.groupby('kind').agg({'height': 'min', 'gender': lambda g: (g == 'male').sum()})