【问题标题】:pandas groupby named aggregationpandas groupby 命名聚合
【发布时间】:2020-09-18 15:33:24
【问题描述】:

我想将 pandas 从 0.25.3 升级到版本 1 给定一个数据框

import pandas as pd


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

我应该如何迁移以下groupby

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'))
)

由于缺少 group 列,因此无法按预期工作。查看grouped.columns的输出

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

对比

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

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    我找到的唯一解决方案是也包含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')
            )
    )
    

    【讨论】:

      【解决方案2】:

      这是 pandas 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)
      

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 2014-11-23
        • 2022-01-21
        • 2019-08-10
        • 2017-11-03
        • 2021-09-19
        • 1970-01-01
        • 2018-09-29
        • 2020-01-28
        相关资源
        最近更新 更多