python - 重采样时间序列的中心日期时间

标签 python pandas

当我对 Pandas 时间序列进行重新采样以减少数据点数量时,每个结果数据点的时间戳位于每个重新采样箱的开始处。当使用不同的重采样率过度绘制图形时,这会导致数据发生明显的变化。无论重采样率如何,如何将重采样数据的时间戳“居中”在其容器中?

我现在得到的是(重新采样到一小时时):

In [12]: d_r.head()
Out[12]: 
2017-01-01 00:00:00    0.330567
2017-01-01 01:00:00    0.846968
2017-01-01 02:00:00    0.965027
2017-01-01 03:00:00    0.629218
2017-01-01 04:00:00   -0.002522
Freq: H, dtype: float64

我想要的是:

In [12]: d_r.head()
Out[12]: 
2017-01-01 00:30:00    0.330567
2017-01-01 01:30:00    0.846968
2017-01-01 02:30:00    0.965027
2017-01-01 03:30:00    0.629218
2017-01-01 04:30:00   -0.002522
Freq: H, dtype: float64

MWE 显示明显的转变:

#!/usr/bin/env python3
Minimal working example:

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
import seaborn
seaborn.set()

plt.ion()

# sample data
t = pd.date_range('2017-01-01 00:00', '2017-01-01 10:00', freq='1min')
d = pd.Series(np.sin(np.linspace(0, 7, len(t))), index=t)


d_r = d.resample('1h').mean()

d.plot()
d_r.plot()

Apparent shift of resampled data

最佳答案

我一般不知道如何使用中点。有 label 参数,但只有选项 rightleft。但是,在具体情况下,您可以使用 loffset 参数显式偏移重采样时间戳:

d.resample('1h', loffset='30min').mean()

(编辑:使用 30min 而不是 30T,因为这样更具可读性: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases )

关于python - 重采样时间序列的中心日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395119/

相关文章:

python - 如何解释 Python commands.getstatusoutput() 中的状态代码

python - pandas 中高效的列内操作

python - 计算自上次维护以来的日期差异的有效方法是什么?

python - 使用列表理解返回第一个找到的元素或 None

python - 如何在数据框列上应用上限?

python - 更改 pandas MultiIndex 的字符串编码

python - scikit learn 的 fit_transform 是否也会转换我的原始数据框?

python - 如何使用 winsound 阻止声音相互叠加? (Python 和 tkinter)

python - 多行为空时如何进行合并

python - Django + MongoDB