使用默认func的python聚合groupby

使用默认func的python聚合groupby,python,pandas,dataframe,group-by,aggregate,Python,Pandas,Dataframe,Group By,Aggregate,我有一个大于100列的大型数据框,我想按id列对它进行分组,并获取大多数列的第一个值,但我想为一些列提供特定的聚合函数。寻找一个简单的方法来做到这一点。任何帮助都将不胜感激 name score_1 score_2 score_3.........score_100 0 Foo 5 10 10 10 1 Baar 10 15 20 10 2 Foo

我有一个大于100列的大型数据框,我想按id列对它进行分组,并获取大多数列的第一个值,但我想为一些列提供特定的聚合函数。寻找一个简单的方法来做到这一点。任何帮助都将不胜感激

    name  score_1  score_2  score_3.........score_100
0   Foo        5       10       10            10
1  Baar       10       15       20            10
2   Foo       15       10       30            10
3  Baar       10       25       40            10
我想按名称在数据框上分组,保持列score_1的“first”值为score_98,score_99的“sum”值为score_100的“mean”


我尝试过使用df.groupby(name).agg(collate).reset_index(),需要编写collate函数的帮助或更好的方法。谢谢

您可以使用字典理解并通过语法组合两个字典{**d1,**d2}:

funcs = {**{'score_'+str(i): 'first' for i in range(1, 3)},
         **{'score_99': 'sum', 'score_100': 'mean'}}

res = df.groupby('name').agg(funcs).reset_index()

print(res)

   name  score_1  score_2  score_99  score_100
0  Baar       10       15        60         10
1   Foo        5       10        40         10
对于此示例输入,将运行上述命令:

print(df)

   name  score_1  score_2  score_99  score_100
0   Foo        5       10        10         10
1  Baar       10       15        20         10
2   Foo       15       10        30         10
3  Baar       10       25        40         10

尝试
.agg({'score_99':'sum','score_100':'mean'})
这会给我数据框中的这两列,我希望所有其他列都有'first'值,请参见@jpp answer,与我的方向相同我有一个大于100列的大数据框。。。你的第一个也是唯一的问题。将数据帧重塑为长格式,您可以运行
groupby
aggregating by score indicators。发布的答案并没有指明运行了哪个聚合,而是显示了df结构如何增加操作的复杂性。