首页 > 解决方案 > 在 groupby.agg、pandas 中使用 lambda 函数

问题描述

我有一个这样的数据框:

pd.DataFrame({
'animal': ['dog', 'dog', 'cat', 'dog', 'cat'],
'color': ['brown', 'black', 'white', 'black', 'black']})

我正在尝试编写这样的 groupby 函数:

groupby('animal').agg(
proportion_of_black=('color', lambda x: 1 if x == 'black' else 0)).reset_index()

它返回以下错误消息:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我的代码哪里出错了?

标签: python-3.xpandaslambdapandas-groupby

解决方案


由于您的问题要求比例而不是计数,您应该这样做:

df.groupby(['animal']).agg(
   proportion=('color', lambda x: x.eq('black').mean())).reset_index()

    animal  proportion
0   cat     0.500000
1   dog     0.666667

推荐阅读