我想在一些测试中过滤一个有很多用户尝试的数据帧。我已经根据ID和日期对数据框进行了排序。问题是,我不知道如何为特定用户最大限度地过滤所有这些行。我想删除每个用户的最大点之后的行。
例如:
| user | score | date |
| A | 5 | 2021-11-14 10:22:13.854 |
| A | 7 | 2021-11-14 10:25:03.044 |
| B | 4 | 2021-11-16 19:01:42.005 |
| B | 7 | 2021-11-16 19:04:21.859 |
| B | 6 | 2021-11-16 19:06:52.372 |
我想过滤数据帧,这样对于用户B,只有前两行是过滤器(因为第三行低于该用户的最大值(。
结果是:
| user | score | date |
| A | 5 | 2021-11-14 10:22:13.854 |
| A | 7 | 2021-11-14 10:25:03.044 |
| B | 4 | 2021-11-16 19:01:42.005 |
| B | 7 | 2021-11-16 19:04:21.859 |
这应该有效:
df.groupby('user').apply(lambda g: g.head(g['score'].argmax()+1)).reset_index(drop=True)
因为:
- 首先,按用户/ID分组
- 然后,对于每组,获得最大分数的位置(如果有多个这样的分数,它会选择第一个出现的分数(
- 并返回该行之前的行