python - 重新采样 Pandas 时间序列以获得 bin 名称的结束时间戳?

标签 python pandas

我生成了一个 5 分钟时间序列示例:

index = pd.date_range('1/1/2000', periods=10, freq='5T')
data=range(10)
ser = pd.Series(data, index=index)

它看起来像什么:

2000-01-01 00:00:00    0.0
2000-01-01 00:05:00    1.0
2000-01-01 00:10:00    2.0
2000-01-01 00:15:00    3.0
2000-01-01 00:20:00    4.0
2000-01-01 00:25:00    5.0
2000-01-01 00:30:00    6.0
2000-01-01 00:35:00    7.0
2000-01-01 00:40:00    8.0
2000-01-01 00:45:00    9.0
Freq: 5T, dtype: float64

我需要什么

我想将此时间序列转换为 15 分钟的时间序列,并将每个 15 分钟的值作为在该 15 分钟期间观察到的 5 分钟值的平均值,即

2000-01-01 00:15:00    2.0   # i.e. mean(1, 2, 3)
2000-01-01 00:30:00    5.0   # i.e. mean(4, 5, 6)
2000-01-01 00:45:00    8.0   # i.e. mean(7, 8, 9)

我尝试过的事情

如果我将这些数据重新采样到 15 分钟的桶中并调用平均值,我会得到:

ser.resample('15T').mean()

2000-01-01 00:00:00    1.0
2000-01-01 00:15:00    4.0
2000-01-01 00:30:00    7.0
2000-01-01 00:45:00    9.0

这不是我想要的计算方式。如果我将 close='right' 添加到重新采样调用中,我会更接近我想要的值,但时间戳不正确。

ser.resample('15T', closed='right').mean()
1999-12-31 23:45:00    0.0
2000-01-01 00:00:00    2.0
2000-01-01 00:15:00    5.0
2000-01-01 00:30:00    8.0
Freq: 15T, dtype: float64

有什么建议吗?

最佳答案

您可以在resample中使用label参数,

ser.resample('15T', label='right', closed='right').mean()

这会将标签从重新采样窗口的左侧(默认)移动到右侧。这比我有些笨拙的评论更简洁。

关于python - 重新采样 Pandas 时间序列以获得 bin 名称的结束时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48703761/

相关文章:

python - 有没有办法用 ast.literal_eval 执行 range() ?

python - 将打印语句写入文本文件

python - 将行添加到 Pandas DataFrame 中的组

python - Python 的 ESB?

python - 如何使用Snakemake中的expand函数对列表进行排列或组合

python - 语法错误 : 'await' outside async function in Discord. py

python - pandas 时间戳 - dateoffset 的错误结果

python - 索引使用 CrossTab Pandas 获得的 DataFrame

python - 如何将返回值(从上一个函数)读取到 pandas、python 中?获取错误消息

python - Pandas GroupBy 具有特殊总和