python - Pandas 聚合动态列名

标签 python pandas aggregate pandas-groupby

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

import pandas as pd
df = pd.DataFrame({
'group': ['A', 'A', 'A', 'B', 'B'],
'group_color' : ['green', 'green', 'green', 'blue', 'blue'],
'val1': [5, 2, 3, 4, 5], 
'val2' : [4, 2, 8, 5, 7]
})

  group group_color  val1  val2
0     A       green     5     4
1     A       green     2     2
2     A       green     3     8
3     B        blue     4     5
4     B        blue     5     7

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

df.groupby('group').agg({"group_color": "first", "val1": "mean", "val2": "mean"})

      group_color      val1      val2
group                                
A           green  3.333333  4.666667
B            blue  4.500000  6.000000

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

最佳答案

更简单,例如

df.groupby('group').agg(lambda x : x.head(1) if x.dtype=='object' else x.mean())
Out[63]: 
      group_color      val1      val2
group                                
A           green  3.333333  4.666667
B            blue  4.500000  6.000000

关于python - Pandas 聚合动态列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57994290/

相关文章:

python - 使用字典中的值过滤 Pandas 数据框

python - 如何从pdf中提取带有缩进的文本?

python - 有什么方法可以使用列索引映射值吗?

python - Pandas:使用 groupby 获取每个数据类别的平均值

python - 不能模拟被模拟对象的方法? pytest 中的 call_count 为 0

python - Pandas - 检查列中的值是否是同一列中另一个值的子字符串

python - Pandas date_range 只有小时、分钟和秒

node.js - Mongodb Node.js $lookup 带日期和 $match

java - Maven 聚合 POM 与目标?

python - 比较 Python 字典中的值