【问题标题】:pandas resample to a fixed datetime熊猫重新采样到固定的日期时间
【发布时间】:2018-07-09 22:41:21
【问题描述】:

Resample 非常适合我在两次之间对行进行上采样。

例如具有时间序列(ts),例如:

_time                  num
2018-04-11 07:55:00    1
2018-04-11 07:59:00    1

我可以跑:

ts.resample('min').sum().fillna(0)

得到:

_time                  num
2018-04-11 07:55:00    1
2018-04-11 07:56:00    0
2018-04-11 07:57:00    0
2018-04-11 07:58:00    0
2018-04-11 07:59:00    1

但是,无论如何,我都想重新采样直到午夜,而不是重新采样到系列中的最后一行。

例如最终输出为:

_time                  num
2018-04-11 07:55:00    1
2018-04-11 07:56:00    0
2018-04-11 07:57:00    0
2018-04-11 07:58:00    0
2018-04-11 07:59:00    1
...
2018-04-11 23:58:00    0
2018-04-11 23:59:00    0
2018-04-12 00:00:00    0

一种解决方案是在 _time 为午夜且 num 为 0 的系列中添加一行。

但是,有没有更优雅的内置解决方案?

【问题讨论】:

  • 你希望你的输出是什么样的?
  • @Scotty1- 我编辑了问题以使其更清楚
  • 那么你想用零填充你的 DataFrame 从2018-04-11 07:59:00 直到2018-04-12 00:00:00 还是你有其他值而不是你想要插值/平均/等的时间序列ts .?
  • 我想用零填充所有这些分钟
  • 还有2018-04-11 07:55:002018-04-11 07:59:00之间的分钟数?

标签: python pandas time-series


【解决方案1】:

虽然没有像 midnight (AFAIK) 那样使用resample 达到所需终点的内置解决方案,但请考虑使用动态解决方案根据当前 ts 数据使用 pd.concat 在单值计算的 midnight 系列上。

具体来说,midnight 系列是通过获取 tsmax 索引值并将其标准化为午夜,然后使用 datetime 的 timedelta() 添加 1 天来构建的:

import numpy as np
import pandas as pd
import datetime as dt

ts = pd.Series([1,0,0,0,1], name = 'num',
               index = pd.date_range('2018-04-11 07:55:00', periods=5, freq='min')).rename_axis('_time')

# NORMALIZE AND THEN ADD 1 DAY
midnight = pd.Series([np.nan], name = 'num',
                     index = [max(ts.index).normalize() + dt.timedelta(days=1)]).rename_axis('_time')

# CONCATENATE BOTH SERIES AND THEN RESAMPLE
final_ts = pd.concat([ts, midnight]).resample('min').sum().fillna(0)

print(final_ts.head())
# _time
# 2018-04-11 07:55:00    1.0
# 2018-04-11 07:56:00    0.0
# 2018-04-11 07:57:00    0.0
# 2018-04-11 07:58:00    0.0
# 2018-04-11 07:59:00    1.0
# Freq: T, Name: num, dtype: float64

print(final_ts.tail())
# _time
# 2018-04-11 23:56:00    0.0
# 2018-04-11 23:57:00    0.0
# 2018-04-11 23:58:00    0.0
# 2018-04-11 23:59:00    0.0
# 2018-04-12 00:00:00    0.0
# Freq: T, Name: num, dtype: float64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多