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函数在这里不起作用?
答案 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
但是,我确实认为这是一个错误。