我正在尝试按ID分组来获取每一列的均值。但是我没有让它按我的意愿工作。
数据:
ID Property3 Property2 Property3
1 10.2 ... ...
1 20.1
1 51.9
1 15.8
1 12.5
...
1203 104.4
1203 11.5
1203 19.4
1203 23.1
我到目前为止所得到的:我有两次尝试。但是它们都只用于一列,而我不知道该如何做那么一列。:
data.groupby('id')['property1'].apply(lambda grp: grp.nlargest(100).mean())
1 37.897989
2 33.059432
3 34.926530
4 33.036137
data.groupby('id').agg({'property1': {lambda grp: grp.nlargest(100).mean()}})
id property1 <lambda>
1 37.897989
2 33.059432
3 34.926530
4 33.036137
我想要的是:从概念上来说,我希望有一个数据框如下:
ID Property3 Property2 Property3
1 37.8 5.6 2.3
2 33.0 1.5 10.4
3 34.9 91.5 10.3
4 33.0 10.3 14.3
因此,每行均包含按ID分组的EACH列的100个最大值的平均值。
使用GroupBy.agg
省略列来处理DataFrame中不使用GroupBy.agg
的所有列:
ID
或在df = data.groupby('ID').agg(lambda grp: grp.nlargest(100).mean()).reset_index()
print (df)
ID Property1 Property2 Property3
0 1.0 22.1 ... ...
1 1203.0 39.6 ... ...
之后指定列:
groupby
与df = (data.groupby('ID')['Property1','Property2','Property3']
.agg(lambda grp: grp.nlargest(100).mean())
.reset_index())
一起使用GroupBy.agg
这样GroupBy.agg
是一列:
as_index=False