在groupby对象的pandas agg方法中传递函数

问题描述

这是在Google colab中

import pandas as pd
df = pd.DataFrame({'A': ['state1','state2','state1','state2'],'B': [1,2,3,4,5],'C': [10,11,12,13,14]})
print(df)

      A     B    C
0   state1  1   10
1   state2  2   11
2   state1  3   12
3   state1  4   13
4   state2  5   14

这是DataFrame。如果我们将内置的“ max”函数agg函数一起使用,则效果很好。

df.groupby('A',as_index=False)['C'].agg('max')

      A     C
0   state1  13
1   state2  14

但是,如果我们使用lambda函数会引发错误

df.groupby('A',as_index=False)['C'].agg(lambda x: x.max())

AttributeError: 'Series' object has no attribute 'columns'

这为什么引发错误?在agg方法中传递lambda函数和内置函数有什么区别?

就我而言,它在jupyter笔记本电脑中也不起作用

enter image description here

解决方法

这对我有用:

df.groupby('A',as_index=False)[['C']].agg(lambda x: x.max())
,

以前,当我第一次运行该问题时,熊猫版本是1.0.5。

但是之后,我将版本更新为1.1.0并运行了相同的内容,并且运行正常。

!pip install pandas==1.1.0
import pandas as pd

df = pd.DataFrame({'A': ['state1','state2','state1','state2'],'B': [1,2,3,4,5],'C': [10,11,12,13,14]})

print(df.groupby('A',as_index=False)['C'].agg(lambda x: x.max()))

       A     C
0   state1  13
1   state2  14