Python 更改时间戳的开始和结束时间

Python 更改时间戳的开始和结束时间,python,pandas,Python,Pandas,我正在处理一个数据集,在这个数据集中,观察发生在开放和关闭时间之间,但服务在开放后的第二天关闭。例如,开盘时间为上午7点,收盘时间为次日凌晨1点 这感觉像是一个非常常见的问题——我已经到处搜索过了,我很乐意接受这样一个事实,我可能只是不知道要搜索的正确术语 对于我的大多数使用,它足以做以下事情: open_close = pd.DatetimeIndex(start='2012-01-01 05:00:00', periods = 15, offset='D') 然后我就可以在df上做有

我正在处理一个数据集,在这个数据集中,观察发生在开放和关闭时间之间,但服务在开放后的第二天关闭。例如,开盘时间为上午7点,收盘时间为次日凌晨1点

这感觉像是一个非常常见的问题——我已经到处搜索过了,我很乐意接受这样一个事实,我可能只是不知道要搜索的正确术语

对于我的大多数使用,它足以做以下事情:

   open_close = pd.DatetimeIndex(start='2012-01-01 05:00:00', periods = 15, offset='D')
然后我就可以在df上做有趣的小群比:
df.groupby(open\u close.asof).agg(func)。

但我遇到了一个例子,我需要抓住多个这样的开盘-收盘时段。我真正想做的就是有一个DatetimeIndex,在那里我可以选择一天的开始时间。所以我可以把“一天”重新定义为从早上5点到早上5点。这样做的好处是,我可以使用类似于df[df.index.dayofweek==6]的东西,从周日早上5点到蒙达早上5点,把所有东西都拿回来

感觉像是经期…或是熊猫体内的什么东西在期待这个请求。我很乐意帮你弄清楚

编辑:

我还通过创建另一个具有正确日期的专栏来解决这一问题
df['shift\u day']=df['datetime']。应用(magicfunctiontofigureoutpenclose)


--所以这并没有阻碍我的进步。感觉就像是可以很好地集成到包中的东西(或datetime…或某处…)

df.resample()的
base
参数可能会有帮助:

base : int, default 0
    For frequencies that evenly subdivide 1 day, the "origin" of the
    aggregated intervals. For example, for '5min' frequency, base could
    range from 0 through 4. Defaults to 0
下面是一个例子:

In [44]: df = pd.DataFrame(np.random.rand(28),
....:           index=pd.DatetimeIndex(start='2012/9/1', periods=28, freq='H'))

In [45]: df
Out[45]: 
                            0
2012-09-01 00:00:00  0.970273
2012-09-01 01:00:00  0.730171
2012-09-01 02:00:00  0.508588
2012-09-01 03:00:00  0.535351
2012-09-01 04:00:00  0.940255
2012-09-01 05:00:00  0.143483
2012-09-01 06:00:00  0.792659
2012-09-01 07:00:00  0.231413
2012-09-01 08:00:00  0.071676
2012-09-01 09:00:00  0.995202
2012-09-01 10:00:00  0.236551
2012-09-01 11:00:00  0.904853
2012-09-01 12:00:00  0.652873
2012-09-01 13:00:00  0.488400
2012-09-01 14:00:00  0.396647
2012-09-01 15:00:00  0.967261
2012-09-01 16:00:00  0.554188
2012-09-01 17:00:00  0.884086
2012-09-01 18:00:00  0.418577
2012-09-01 19:00:00  0.189584
2012-09-01 20:00:00  0.577041
2012-09-01 21:00:00  0.100332
2012-09-01 22:00:00  0.294672
2012-09-01 23:00:00  0.925425
2012-09-02 00:00:00  0.630807
2012-09-02 01:00:00  0.400261
2012-09-02 02:00:00  0.156469
2012-09-02 03:00:00  0.658608


嘿,这是一个很酷的方式群比!但我已经可以很好地分组了——当我需要多个周期时,我的问题就来了。比如说,我想要过去三个“星期五时段”,从[5AM Fri,5AM Sat]开始。我开始认为我没有很好地描述我的问题——将进行编辑。没问题,很抱歉没有达到目标。困难的部分似乎是调整数据。既然已经解决了,那么你的下一个问题是:如何获取第Y天的最后X个实例?会
df吗[df.index.dayofweek==Y].ix[-X:
work?这对我不起作用——这里的问题解决了我的核心问题。当你按dayofweek进行筛选时,你可以这样做,这样你就不能达到[12am DayofWeek1,12am DayofWeek2]定义的“跨越”天了。好的,先用
df.shift(freq='-5H'之类的东西来移动时间戳怎么样
?@crewburn--base可以满足我的需要。我遇到了这个问题--
In [46]: df.resample("24H", how=sum, label='left', closed='left', base=5)
Out[46]: 
                             0
2012-08-31 05:00:00   3.684638
2012-09-01 05:00:00  11.671068

In [47]: df.ix[:5].sum()
Out[47]: 0    3.684638

In [48]: df.ix[5:].sum()
Out[48]: 0    11.671068