python pandas 日期_python – Pandas按时间分组并指定开始时间

– 编辑我注意到我输入的时间不是我想要的.我将12点之后的时间转换为24小时时间约定.但是,unutbu的答案应该仍然清楚.

– 第二次编辑.我改变了数据以做出更好的例子.

以下是按日期索引的时间序列.我想从start_datetime开始进行聚合,并根据下面的timedelta(9.5小时= 34200秒)继续聚合.

def main():

# start_datetime = datetime.datetime(2013, 1, 1, 8)

# end_datetime = datetime.datetime(2013, 1, 1, 5, 30)

s = pd.Series(

np.arange(2, 10),

pd.to_datetime([

'20130101 7:34:04', '20130101 8:34:08', '20130101 10:34:08',

'20130101 12:34:15', '20130101 13:34:28', '20130101 12:34:54',

'20130101 14:34:55', '20130101 17:29:12']))

print(s)

bar_size = datetime.timedelta(seconds=60*60*9.5)

time_group = pd.Grouper(

freq=pd.Timedelta(bar_size), closed='left', label='right')

foobar = s.groupby(time_group).agg(np.sum)

print(foobar)

if __name__ == "__main__":

main()

运行上面的代码将输出以下内容:

2013-01-01 09:30:00 5

2013-01-01 19:00:00 39

Freq: 570T, dtype: int64

大熊猫内部决定从午夜开始分组,而不是从早上8:00开始分组.我无法找到一种方法来强制数据帧在上午8:00开始分组.有没有人有使用熊猫功能的解决方案?

解决方法:

使用base = 480将起点移动480分钟(8小时).

单位是几分钟,因为石斑鱼的频率是570T(T,这里,表示分钟):

import datetime

import pandas as pd

def main():

start_datetime = datetime.datetime(2013, 1, 1, 8)

s = pd.Series(

range(8),

pd.to_datetime([

'20130101 8:34:04', '20130101 10:34:08', '20130101 10:34:08',

'20130101 12:34:15', '20130101 1:34:28', '20130101 3:34:54',

'20130101 4:34:55', '20130101 5:29:12']))

bar_size = datetime.timedelta(seconds=60*60*9.5)

time_group = pd.Grouper(freq=bar_size, closed='left', label='right',

base=480)

foobar = s.groupby(time_group).agg(sum)

print(foobar)

if __name__ == "__main__":

main()

产量

2013-01-01 08:00:00 22

2013-01-01 17:30:00 6

Freq: 570T, dtype: int64

在内部,当给pd.Grouper一个频率时,a TimeGrouper is returned:

In [81]: time_group

Out[81]:

因此传递给pd.Grouper的参数实际上传递给pd.TimeGrouper.

In [82]: pd.TimeGrouper?

Init signature: pd.TimeGrouper(self, freq='Min', closed=None, label=None,

how='mean', nperiods=None, axis=0,

fill_method=None, limit=None, loffset=None,

kind=None, convention=None, base=0, **kwargs)

TimeGrouper文档不解释基本参数,但它与df.resample中的含义相同:

In [83]: df.resample?

Parameters

----------

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

标签:python,pandas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值