【问题标题】:how to use grouping value in aggregation function in pandas?如何在 pandas 的聚合函数中使用分组值?
【发布时间】:2020-07-30 20:03:18
【问题描述】:

我的数据框由两列组成:第一列用于组名称,第二列用于与给定组相关的值(因此一个组可以有多个值)。 我想连接值以只为每个组保留一个条目,并添加一些额外的信息。

grouped = df.groupby('group_name').agg(lambda x: 'some additional info:\n{}'.format('\n'.join(x)))

分组的示例行如下所示:

Citrus    "some additional info\nLemon\nOrange\nGrapefruit"

是否有一些优雅的方法可以将 group_name 包含在此类聚合中,以便结果如下所示?

Citrus    "some additional info\nCitrus\nLemon\nOrange\nGrapefruit"

【问题讨论】:

    标签: python-3.x pandas lambda pandas-groupby aggregation


    【解决方案1】:

    用途:

    print (df)
      group_name         col
    0     Citrus       Lemon
    1     Citrus      Orange
    2     Citrus  Grapefruit
    

    因为GroupBy.agg 方法可以单独处理每一列,所以可以将列转换为索引并选择索引值:

    f = lambda x: 'some additional info:\n{}\n{}'.format(x.index[0], '\n'.join(x))
    grouped = df.set_index('group_name').groupby('group_name')['col'].agg(f)
    print (grouped)
    group_name
    Citrus    some additional info:\nCitrus\nLemon\nOrange\n...
    Name: col, dtype: object
    

    或者可以使用GroupBy.apply:

    f = lambda x: 'some additional info:\n{}\n{}'.format(x.name, '\n'.join(x['col']))
    grouped = df.groupby('group_name').apply(f)
    print (grouped)
    group_name
    Citrus    some additional info:\nCitrus\nLemon\nOrange\n...
    dtype: object
    

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多