首页 > 解决方案 > 过滤每人 2 个最高的唯一值

问题描述

我被困在我的项目中的数据争论步骤中,我想知道是否有人能够帮助我。

我拥有的数据框的一部分是这样的:

GPI
1 12 10
1 12 12
1 11 18
1 10 20
2 10 12
2 8 14
2 9 16

但是,我按 Person 分组,只保留 2 个最大的唯一月份值的行。因此,对于第 1 个人,这将是第 12 和第 11 个月,对于第 2 个人,这将是第 10 和第 9 个月。最终我想平均每人的 GPI。

该表应如下所示

GPI avg_GPI
1 12 10 8
1 12 7 8
1 11 7 8
2 10 12 14
2 9 16 14

希望其他人可以帮助我解决这个问题。

这是创建第一个表的代码: import pandas as pd

df = pd.DataFrame({'Person':[1, 1, 1, 1, 2, 2, 2],
                  'month':[12, 12, 11, 10, 10, 8, 9],
                  'GPI':[10, 12, 18, 20, 12, 14, 16]})

提前致谢!

标签: pythonpandasdataframedata-wrangling

解决方案


groupbyrank

我们可以尝试选择groupbyrank每个最大 2 个月值相对应的行Person

df[df.groupby('Person')['month'].rank('dense', False) <= 2]

   Person  month  GPI
0       1     12   10
1       1     12   12
2       1     11   18
4       2     10   12
6       2      9   16

推荐阅读