如何在pandas中的聚合函数中使用分组值?

how to use grouping value in aggregation function in pandas?

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

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"

使用:

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

因为 GroupBy.agg 方法可以分别处理每一列 将列转换为索引和 select 索引值:

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