【发布时间】:2017-06-24 22:45:03
【问题描述】:
我有一个 pandas 数据框,其中有一列以 KmH 为单位的速度和一列时间戳:
Date, Speed
2016-07-07 13:38:02.000, 50.718590
2016-07-18 11:28:00.000, 2.357645
2016-07-15 15:03:08.000, 14.652172
2016-07-18 06:53:00.000, 24.530390
... ...
2016-07-18 18:41:31.000, 31.761416
2016-07-14 05:28:42.187, 7.532758
我想要的是平均每天每 15 分钟有一个harmonic average speed:
Time, Speed
00:00, 32
00:15, 10
00:30, 12
00:45, 41
01:00, 12
...
23:30, 30
23:45, 31
我最初的尝试是从每个时间戳中删除日期,将其设置为索引,然后使用 TimeGrouper 来查找平均值。 (我的数据框称为输出)代码是:
output['Speed'] = output['Speed']**-1
output['Date'] = output['Date'].apply( lambda d : d.time() )
output = output.set_index(['Date'])
output = output.groupby(pd.TimeGrouper('15Min')).mean()
output['Speed'] = output['Speed']**-1
代码不起作用,因为它给了我一个错误:
Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'
【问题讨论】:
-
您可以尝试不将日期时间更改为仅时间的第一行,所以只需
output = output.set_index(['Date']) output = output.groupby(pd.TimeGrouper('15Min')).mean() -
它不会产生错误,但是它会创建从第一个日期到最后一个日期每 15 分钟的平均速度,而我想要的是每天平均一次。
-
好的,你可以做的一件事是通过这样做
pd.to_datetime(df['date'].dt.strftime('%H:%M:%S'))来标准化日期,这会将所有条目的日期设置为相同,然后你可以做你之前做的事情
标签: python python-3.x sorting date pandas