熊猫分组命名为聚合

时间:2020-02-25 12:51:48

标签: python-3.x pandas

我想将熊猫从0.25.3升级到版本1 给定数据框

import pandas as pd


d = {'group': [1, 2, 2], 'value': [3, 4, 5]}
df = pd.DataFrame(data=d)

我应该如何迁移以下分组依据

aggregation = {
    "value": {
        "min": lambda x: x.min(skipna=True),
    }
}
grouped = (
    df[["group", "value"]]
        .groupby(["group"], as_index=False)
        .agg(aggregation)
)

grouped = (
    df[["group", "value"]]
        .groupby(["group"], as_index=False)
        .agg(min=pd.NamedAgg(column='value', aggfunc='min'))
)

这不符合预期,因为缺少组列。查看grouped.columns

的输出

MultiIndex([('group',''), ('value','min')], )

vs

索引(['min'],dtype ='object')

2 个答案:

答案 0 :(得分:0)

我发现的唯一解决方案是也包括group列。 as_index=False似乎不再起作用

grouped = (
    df[["group", "value"]]
        .groupby(["group"], as_index=True)
        .agg(
            group=NamedAgg(column='group', aggfunc=lambda x: x.iloc[0]),
            min=pd.NamedAgg(column='value', aggfunc='min')
        )
)

答案 1 :(得分:0)

这是熊猫1.0中的错误。我提出了问题here。 升级到pandas 1.1,您的代码将开始工作。
无需升级的最简单解决方法是将聚合和重命名分开。

aggregation = {
    "value": lambda x: x.min(skipna=True),
    
}
grouped = (
    df[["group", "value"]]
        .groupby(["group"], as_index=False)
        .agg(aggregation)
)
grouped.rename(columns={'value':'min'}, inplace=True)