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访问器
;然后我尝试将时间戳转换从@Psidompd.应用到_datetime(df.timestamp)
这会导致错误AttributeError:“DatetimeProperties”对象没有属性“floor”
您需要确保时间戳是datetiime数据类型,并且仍然需要使用.dt
访问器。似乎可以工作,但只有在我首先将df.timestamp=pd.应用到_datetime(df.timestamp)
之后