无法在熊猫NamedAgg函数中使用Lambda函数

时间:2019-08-14 01:35:09

标签: python pandas

pandas 0.25引入了一个名为NamedAgg的新功能,以允许在groupby对象上创建命名字段,这是一个非常不错的功能,参见(NamedAgg)。

但是,看来我无法在lambda函数上使用它。我不知道这是错误还是设计错误。

设置:

df = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],
                         'height': [9.1, 6.0, 9.5, 34.0],
                         'weight': [7.9, 7.5, 9.9, 198.0]})

在字典中使用lambda可以正常工作。这是旧方法。

(
    df.groupby(by='kind')
    .height.agg({'height_min':lambda x: np.min(x**2), 'height_max':'max'})
)

通过新的NamedAgg函数使用lambda无效

(
    df.groupby(by='kind')
    .agg(height_min=pd.NamedAgg(column='height', aggfunc=lambda x: np.min(x**2)), 
         height_max=pd.NamedAgg(column='height', aggfunc='max')
        )
)

将lambda与隐式NamedAgg函数一起使用也不起作用

(
    df.groupby(by='kind')
    .agg(height_min=('height', lambda x: np.min(x**2)), 
         height_max=('height', 'max')
        )
)

谁能解释为什么lambda函数在这里不起作用?

1 个答案:

答案 0 :(得分:1)

这是使用0.25语法和单个聚集列来实现此目的的一种方法:

df.groupby('kind')['height'].agg(height_min=lambda x: np.min(x**2),
                                 height_max='max')

输出:

      height_min  height_max
kind                        
cat        82.81         9.5
dog        36.00        34.0

但是,我确实认为这是一个错误。