我有以下数据集:
value timestamp
0 Fire 2017-10-03 14:33:52
1 Water 2017-10-04 14:33:48
2 Fire 2017-10-04 14:33:45
3 Fire 2017-10-05 14:33:30
4 Water 2017-10-03 14:33:40
5 Water 2017-10-05 14:32:13
6 Water 2017-10-04 14:32:01
7 Fire 2017-10-03 14:31:55
我想每天按timestamp
对此设置进行分组,然后只选择每天最早的行。对于上面的示例,结果如下:
value timestamp
1 Water 2017-10-05 14:32:13
2 Water 2017-10-04 14:32:01
3 Fire 2017-10-03 14:31:55
例如,对于2017-10-03
这一天,有3个条目,但我只想要那天最早的条目。
答案 0 :(得分:4)
如果您有唯一索引,则可以使用idxmin
上的timestamp
查找最小时间戳的索引,并使用loc
提取它们:< / p>
df.timestamp = pd.to_datetime(df.timestamp)
df.loc[df.groupby(df.timestamp.dt.date, as_index=False).timestamp.idxmin()]
# value timestamp
#7 Fire 2017-10-03 14:31:55
#6 Water 2017-10-04 14:32:01
#5 Water 2017-10-05 14:32:13
答案 1 :(得分:3)
只是确定
df.timestamp = pd.to_datetime(df.timestamp)
解决方案
d1 = df.sort_values('timestamp')
d1[~d1.timestamp.dt.date.duplicated()]
value timestamp
7 Fire 2017-10-03 14:31:55
6 Water 2017-10-04 14:32:01
5 Water 2017-10-05 14:32:13
答案 2 :(得分:2)
使用dt.floor
和head
:
df.sort_values('timestamp').groupby(df['timestamp'].dt.floor('D')).head(1)
输出:
value timestamp
7 Fire 2017-10-03 14:31:55
6 Water 2017-10-04 14:32:01
5 Water 2017-10-05 14:32:13
答案 3 :(得分:1)
或
df.groupby(df.timestamp.dt.date).apply(lambda x:x[x.timestamp==min(x.timestamp)])
Out[714]:
value timestamp
timestamp
2017-10-03 7 Fire 2017-10-03 14:31:55
2017-10-04 6 Water 2017-10-04 14:32:01
2017-10-05 5 Water 2017-10-05 14:32:13