我的df有两列,分别是id
和date
。
例如,
id date
0 A 2019-10-01 10:25
1 B 2019-10-17 16:16
2 A 2019-09-28 09:29
3 C 2019-08-01 08:01
4 C 2019-09-17 17:05
5 C 2019-09-20 11:20
我想按date
过滤df,然后按id
进行分组,最后只将前N个结果保存到newdf
中。
但是,过滤效果很好,但是分组不适用于以下代码:
new_df = df[df.date >= '2019-09-01 00:00'].groupby('id').head(3)
这段代码得到这样的结果
id date
0 A 2019-10-01 10:25
1 B 2019-10-17 16:16
2 A 2019-09-28 09:29
4 C 2019-09-17 17:05
5 C 2019-09-20 11:20
但理想情况下,newdf
应该具有以下结果:
id date
0 A 2019-10-01 10:25
1 B 2019-10-17 16:16
4 C 2019-09-17 17:05
没有编译错误,我该怎么办?
答案 0 :(得分:0)
您需要head(1)
。在groupby上,head
适用于每个组。 head(3)
表示您选择每个组的前3行,而所需的输出显示您希望每个组的前1行
df[df.date >= '2019-09-01 00:00'].groupby('id').head(1)
Out[725]:
id date
0 A 2019-10-01 10:25:00
1 B 2019-10-17 16:16:00
4 C 2019-09-17 17:05:00