【问题标题】:How can I split TimeSeries Data at every 10 minutes using Python如何使用 Python 每 10 分钟拆分一次时间序列数据
【发布时间】:2019-01-02 15:09:40
【问题描述】:

如何每隔 10 分钟打破我的 TimeSeries 数据,这是我的示例数据,在下面的数据中,如果我首先看到没有 10 分钟的数据,因为在第 3 行之后它会跳转到 @ 987654322@ 分钟,因此它将从0 再次开始计数,我想将真/假值放在它最终计数 10 分钟的位置。

我尝试了一种技术x["DateTime"].diff() > pd.Timedelta(minutes=10),但它在数据中找到了 00:10:00 时间戳,然后将其破坏,这不符合我的要求。因为pd.Timedelta(minutes=10) 给出了结果00:10:00

我怎么可能做到这一点?我希望我解释清楚了

DateTime               ValA
2011-01-01 00:01:00    0.551815
2011-01-01 00:01:59    0.542464
2011-01-01 00:03:00    0.520525
2011-01-03 06:39:00    1.225518
2011-01-03 06:40:00    2.241443
2011-01-03 06:40:59    3.148734
2011-01-03 06:42:00    5.361565
2011-01-03 06:43:00    6.878603
2011-01-03 06:43:59    7.127448
2011-01-03 06:45:00    8.130982
2011-01-03 06:46:00    8.188750
2011-01-03 06:46:59    8.267185
2011-01-03 06:48:00    8.204753
2011-01-03 06:49:00    8.121145
2011-01-03 06:49:59    8.129115
2011-01-03 06:51:00    8.160426
2011-01-03 06:52:00    8.301057
2011-01-03 06:53:00    8.342608
2011-01-03 06:53:59    8.390675
2011-01-03 06:55:00    8.063992
2011-01-03 06:56:00    7.396055
2011-01-03 06:56:59    6.771710
2011-01-03 06:58:00    5.295999
2011-01-03 06:59:00    4.210010
2011-01-03 06:59:59    3.689164
2011-01-03 07:01:00    2.963554
2011-01-03 07:02:00    2.873527
2011-01-03 07:02:59    2.885474
2011-01-03 07:04:00    2.394660
2011-01-03 07:05:00    2.603989

期望的输出应该是

DateTime               ValA       Flag
2011-01-01 00:01:00    0.551815   False 
2011-01-01 00:01:59    0.542464   False
2011-01-01 00:03:00    0.520525   False
2011-01-03 06:39:00    1.225518   True
2011-01-03 06:40:00    2.241443   False
2011-01-03 06:40:59    3.148734   False
2011-01-03 06:42:00    5.361565   False
2011-01-03 06:43:00    6.878603   False
2011-01-03 06:43:59    7.127448   False
2011-01-03 06:45:00    8.130982   False
2011-01-03 06:46:00    8.188750   False
2011-01-03 06:46:59    8.267185   False
2011-01-03 06:48:00    8.204753   False
2011-01-03 06:49:00    8.121145   False
2011-01-03 06:49:59    8.129115   True
2011-01-03 06:51:00    8.160426   False
2011-01-03 06:52:00    8.301057   False
2011-01-03 06:53:00    8.342608   False
2011-01-03 06:53:59    8.390675   False

这应该是输出

【问题讨论】:

  • 所以基本上你想看看每个 10 分钟时间箱内是否至少有 10 个值,时间箱在哪里(00-10、10-20、20-30...)?
  • 您的数据是 2 列吗?第二列是干什么用的?
  • @ALollz 不,不是垃圾箱概念,我想获取总共 10 分钟的数据,就像我给出的示例一样,如果您看到 10 分钟内只有 3 个值,那么它会跳转到6:39:00,然后会给出接下来10分钟的数据
  • @DemetriP 实际上它只有一列,我将该日期时间设置为索引,所以它是这样来的,我只是在这里复制了我的数据。
  • 能否请您更适当地格式化一下?

标签: python-3.x pandas timestamp time-series


【解决方案1】:

嗯,这并不完美,但它会在 10 分钟时为您提供True。取决于你从哪里开始计数。

by_seconds = df.resample('1S')

by_seconds['flag'] = by_seconds.index.minute%10==0


DateTime                  ValA          flag
2011-01-01 00:01:00 0.5518149999999999  False
2011-01-01 00:01:01                     False
2011-01-01 00:01:02                     False
2011-01-01 00:01:03                     False
2011-01-01 00:01:04                     False

这只是意味着您的ValA 将有NaN 没有观察。

【讨论】:

  • 您不能重新采样数据?你有错误吗?如果是这样,请确保数据类型是 DateTime
  • 我有一个索引日期和时间,我可以重新映射数据,但您的第二行产生错误“ValueError:无法在 DatetimeIndexResampler 上设置项目”,我根本不想重新采样,我知道无需重新采样就可以完成,这就是我正在寻找的
  • 嗯,可能是熊猫的版本。我不知道您在重新采样时遇到了什么问题,但这正是您想要的。如果您仍然不满意,请在您的问题中包含所需的输出。
  • 我给出了想要的输出
【解决方案2】:

我得到了解决方案,它按照我想要的方式工作我使用 floor()diff() 函数来实现我的答案,

我试过df.DateTime.dt.floor('10T').diff() 我使用了这段代码,它给出了 10 分钟数据的所有细分。

参考:Split Time Series Data Into Time Intervals

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2023-03-16
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多