使用默认func的python聚合groupby
我有一个大于100列的大型数据框,我想按id列对它进行分组,并获取大多数列的第一个值,但我想为一些列提供特定的聚合函数。寻找一个简单的方法来做到这一点。任何帮助都将不胜感激使用默认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
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结构如何增加操作的复杂性。