首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >群按日期使用午夜以外的其他开始时间

群按日期使用午夜以外的其他开始时间
EN

Stack Overflow用户
提问于 2019-10-01 18:08:37
回答 2查看 426关注 0票数 3

我正在按日期汇总一些数据。

代码语言:javascript
复制
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

不起作用,因为我确实需要应用任何重采样/聚合函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-01 18:12:00

例如,可以在分组之前减去偏移量:

代码语言:javascript
复制
for dt, group in df.groupby(df.timestamp.sub(pd.to_timedelta('6H')).dt.date):
    # do stuff
票数 4
EN

Stack Overflow用户

发布于 2019-10-01 18:29:59

有一个base参数用于resamplepd.Grouper,用于处理这种情况。要做到这一点,有很多种方法,选择你觉得更清楚的。

base=0.25

  • '24h‘频率与base=6

  • '1440min’频率与base=360

  • '1D‘频率

代码

代码语言:javascript
复制
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'])

代码语言:javascript
复制
                                    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,则可以:

代码语言:javascript
复制
for dt, gp in df.groupby(pd.Grouper(key='timestamp', freq='24h', base=6)):
    ...

这相当于

代码语言:javascript
复制
for dt, gp in df.resample(on='timestamp', rule='24h', base=6):
    ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58190176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档