过滤每人2个最高的唯一值
我被困在我的项目中的数据整理步骤,我想知道是否有人能够帮助我。
我拥有的数据框的一部分是这样的:
| 人 | 月 | GPI |
|---|---|---|
| 1 | 12 | 10 |
| 1 | 12 | 12 |
| 1 | 11 | 18 |
| 1 | 10 | 20 |
| 2 | 10 | 12 |
| 2 | 8 | 14 |
| 2 | 9 | 16 |
回答
groupby 和 rank
我们可以尝试groupby和rank选择对应于每最大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