Python 熊猫分组按日期选择每天最早的日期

Python 熊猫分组按日期选择每天最早的日期,python,pandas,Python,Pandas,我有以下数据集: 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

我有以下数据集:

            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
我想每天按时间戳对该集合进行分组,然后只选择每天最早的行。对于上述示例,应得出以下结果:

            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个条目,但我只想要当天最早的条目。

如果您有唯一索引,您可以使用
时间戳上的
idxmin
找出最小时间戳的索引,并使用
loc
提取它们:

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

使用
dt.地板
头部

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


只是确保

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
解决方案

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

使用上面的方法时,我会遇到类似的问题:
AttributeError:只能使用带有datetimelike值的.dt访问器
;然后我尝试将时间戳转换从@Psidom
pd.应用到_datetime(df.timestamp)
这会导致错误
AttributeError:“DatetimeProperties”对象没有属性“floor”
您需要确保时间戳是datetiime数据类型,并且仍然需要使用
.dt
访问器。似乎可以工作,但只有在我首先将
df.timestamp=pd.应用到_datetime(df.timestamp)
之后