Phyton:如何获取按ID分组的每个列的n个最大值的平均值

问题描述 投票:1回答:2

我正在尝试按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个最大值的平均值。

python pandas dataframe lambda pandas-groupby
2个回答
2
投票

使用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

1
投票

df = (data.groupby('ID')['Property1','Property2','Property3'] .agg(lambda grp: grp.nlargest(100).mean()) .reset_index()) 一起使用GroupBy.agg这样GroupBy.agg是一列:

as_index=False
© www.soinside.com 2019 - 2024. All rights reserved.