我有一个脚本,可以生成具有不同数量值列的 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/