首页 文章

为什么Pandas系列重采样功能在重新采样后会产生意外的start_time?

提问于
浏览
0

我在熊猫中有时间序列数据,我想通过使用具有指定频率的pandas的重采样函数来计算不同箱中的数据的数量 .

如果你使用熊猫系列看起来像下面的东西:

test_data.head(10)

您将获得结果(仅显示前10个数据,因为它是一个大型系列):

Created
2015-11-29 23:28:50    KBH889
2015-11-29 23:30:43    KBH89U
2015-11-29 23:34:06    KBH88K
2015-11-29 23:38:08    KBH8CC
2015-11-29 23:38:36    KBH83T
2015-11-29 23:40:52    KBH8CF
2015-11-29 23:46:27    KBH8F1
2015-11-29 23:50:01    KBH8DQ
2015-11-29 23:54:29    KBH8FV
2015-11-29 23:58:01    KBH8C6
Name: Order_Number, dtype: object

然后我使用频率为“4541S”的重采样功能(它必须是4541s,不能改变!)

test_data.Order_Number.resample("4541S").count()

结果:

Created
2015-11-29 22:42:18     9
2015-11-29 23:57:59    15
2015-11-30 01:13:40     6
2015-11-30 02:29:21     3
2015-11-30 03:45:02     2
Freq: 4541S, Name: Order_Number, dtype: int64

重新采样的结果以日期时间索引 2015-11-29 22:42:18 开头 . 这是不需要的start_time . 我希望时间成为系列的最小值,在这种情况下,重新采样应该从 2015-11-29 23:28:50 开始 . 有人知道怎么做这个吗?我试图在重采样功能中使用param base 进行调整 . 看起来很难 .

这是您测试的csv file . 导入它并使用count()重新采样 .

1 回答

  • 0

    我认为你是正确的,因为这应该通过 base 论证来实现 . 不幸的是,我也找不到一种方法来轻松地使用原始的第一个datetimeindex(在您的情况下,'2015-11-29 23:28:50')而不是计算的一个('2015-11-29 22:42:18')重新采样重新采样 .

    作为一种可能对您的情况有帮助但对其他情况不完全有用的解决方法,您可以执行以下操作:从原始数据中获取“原始”datetimeindex,并从重新采样的数据中获取“计算的”第一个datetimeindex:

    original = test_data.index[0]
    calculated = test_data.Order_Number.resample('4541S',how='count',base=0).index[0]
    

    (注意我正在使用pandas 0.17 resample API - 您可能需要应用 .count() 而不是使用'how'参数)

    然后得到'计算'的第一个datetimeindex和原始的第一个datetimeindex之间的秒数差异:

    base_seconds = int((original - calculated).seconds)
    

    最后,使用 base_seconds 作为 base 参数的值:

    test_data.Order_Number.resample('4541S',how='count',base=base_seconds)
    

    哪个收益率

    Created
    2015-11-29 23:28:50    19
    2015-11-30 00:44:31    10
    2015-11-30 02:00:12     3
    2015-11-30 03:15:53     3
    Freq: 4541S, Name: Order_Number, dtype: int64
    

    我希望这有帮助 .

相关问题