在 groupby.agg、pandas 中使用 lambda 函数

Mic*_*Jr. 1 lambda python-3.x pandas pandas-groupby

我有一个像这样的数据框:

pd.DataFrame({
'animal': ['dog', 'dog', 'cat', 'dog', 'cat'],
'color': ['brown', 'black', 'white', 'black', 'black']})
Run Code Online (Sandbox Code Playgroud)

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

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

它返回以下错误消息:

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

我的代码哪里出错了?

Ony*_*mbu 6

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

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

    animal  proportion
0   cat     0.500000
1   dog     0.666667
Run Code Online (Sandbox Code Playgroud)