我正在按日期汇总一些数据。
for dt,group in df.groupby(df.timestamp.dt.date):
# do stuff现在,我也想做同样的事情,但不想用午夜来抵消时间。尽管如此,我还是想使用群客,但例如早上6点到早上6点在垃圾箱里。有比虚拟列更好的解决方案吗?不幸的是,如
Resample daily pandas timeseries with start at time other than midnight Resample hourly TimeSeries with certain starting hour
不起作用,因为我确实需要应用任何重采样/聚合函数。
发布于 2019-10-01 18:12:00
例如,可以在分组之前减去偏移量:
for dt, group in df.groupby(df.timestamp.sub(pd.to_timedelta('6H')).dt.date):
# do stuff发布于 2019-10-01 18:29:59
有一个base参数用于resample或pd.Grouper,用于处理这种情况。要做到这一点,有很多种方法,选择你觉得更清楚的。
base=0.25
base=6
base=360的
代码
df = pd.DataFrame({'timestamp': pd.date_range('2010-01-01', freq='10min', periods=200)})
df.resample(on='timestamp', rule='1D', base=0.25).timestamp.agg(['min', 'max'])
#df.resample(on='timestamp', rule='24h', base=6).timestamp.agg(['min', 'max'])
#df.resample(on='timestamp', rule=f'{60*24}min', base=60*6).timestmap.agg(['min', 'max']) min max
timestamp
2009-12-31 06:00:00 2010-01-01 00:00:00 2010-01-01 05:50:00 #[Dec31 6AM - Jan1 6AM)
2010-01-01 06:00:00 2010-01-01 06:00:00 2010-01-02 05:50:00 #[Jan1 6AM - Jan2 6AM)
2010-01-02 06:00:00 2010-01-02 06:00:00 2010-01-02 09:10:00 #[Jan2 6AM - Jan3 6AM)为了完整起见,resample是一种方便的方法,在所有方面都与groupby相同。如果由于某些原因,您绝对不能使用resample,则可以:
for dt, gp in df.groupby(pd.Grouper(key='timestamp', freq='24h', base=6)):
...这相当于
for dt, gp in df.resample(on='timestamp', rule='24h', base=6):
...https://stackoverflow.com/questions/58190176
复制相似问题