动态列名的 Pandas 聚合

共5个回答,已解决, 标签: python pandas aggregate pandas-groupby

我有一个脚本,它用不同数量的值列生成一个 pandas 数据框。例如,这个 df 可能是

进口熊猫作为 pd
数据框 ({)
“组”: [“a” 、 “b”,
“Group _ color”: [“green” 、 “blue”] 、
'Val1': [5,2,3,4,5],
【 4 、 2 、 8 、 5 、 7 】
})

组组 _ 颜色 val1 val2
5 个 4 个
1 个绿色 2 个
2 个绿色 3 个 8 个
3 B 蓝 4 5
4 B 蓝 5 7

我的目标是获得每个值列的分组平均值。在这种特殊情况下 (有两个值列),我可以使用

Df.Group by ('group').agg ({“group _ color”: “first” 、 “val1”: “mean” 、 “val2”: “mean

Val1 val2 组 _ 颜色
组
绿色 3.333333 4.666667
B 蓝 4.500000 6.000000

但是,当所讨论的数据框具有更多的值列 (val3 、 val4 等) 时,这并不起作用。).有没有办法动态取 “所有其他列” 或 “名称中包含 val 的所有列” 的平均值?

第1个答案(采用)

更容易喜欢

如果 x.dtype = = “object”,则 df.Group by (“group”).agg (lambda x: x.head (1)
出【 63 】:
Val1 val2 组 _ 颜色
组
绿色 3.333333 4.666667
B 蓝 4.500000 6.000000
第2个答案

如果你的group_color在一个组中总是一样的,你可以这样做:

Df.Pivo_ table (索引 = ['group','group _ color'],aggfunc = 'meat')

输出:

Val2 val1
组组颜色
绿色 3.333333 4.666667
B 蓝 4.500000 6.000000

在另一种情况下,您可以构建字典并将其传递给agg:

如果 f = = 'group _ color',则 agg_ dict = {f: 'first',否则在 df.列 [1:]} 中 f 的 “平均值”
Df.Group by (“group”).agg (agg_ dict)

哪个输出:

Val1 val2 组 _ 颜色
组
绿色 3.333333 4.666667
B 蓝 4.500000 6.000000
第3个答案

不幸的是,您必须单独应用这两个聚合函数 (或者重复"valn": "mean" as many times as valx columns). Groupby.agg可以使用字典,但是键必须是单独的列。

我会这样做的方式是使用DataFrame.filter to select the subset of the dataframe with the columns following the format of valx,用平均值聚合,然后在其他列上分配带有聚合结果的新列:

(Df.filter (regex = r '^ val').group by (df.group).mean ()
。Assign (color = df.group _ color.group by (df.group).first ()

Val1 val2 颜色:
组
3.333333 4.666667 绿色
B 4.500000 6.000000 蓝色
第4个答案

OP 的评论

enter image description here

我们可以两人一组'group' and 'group_color' without the risk of there being more than one unique 'group_color' per 'group'

因此:

Df.Group by (['group','group _ color').mean _ index (级别 = 1)

Val1 val2 组 _ 颜色
组
绿色 3.333333 4.666667
B 蓝 4.500000 6.000000
第5个答案

你可以去月字典,你可以结合起来,像这样:

D.F.groupby ('group')。平等待遇法案 ({* * {"_ 颜色“: 'first'} * {c: 'mean' 为 c 的 df.列如 c.startswith ('val')}})

在这种情况下,你有一个dict有固定的汇总和其他动态栏选择。

相关问题

通过随机抽样其他列数据创建新列 如何使用熊猫获得包括每一个组合的计数 如何有效地展开矩阵的值与小块? 如何破坏 Python 对象并释放内存 将具有特殊格式的文本文档转换为熊猫数据框架 用两本字典绘制一只熊猫专栏图 动态列名的 Pandas 聚合 C 20 中的指定初始化器 根据给定条件过滤数据框并添加新列 如果我使用 pandas 为同一项目同时具有 True 和 False 行,则获取 True 行。