熊猫将每小时时间序列重新采样为每小时比例时间序列

Posted

技术标签:

【中文标题】熊猫将每小时时间序列重新采样为每小时比例时间序列【英文标题】:Pandas resampling hourly timeseries into hourly proportion timeseries 【发布时间】:2013-04-29 06:00:04 【问题描述】:

我正在使用每小时时间序列(日期、时间 (hr)、P)并尝试计算每小时每日总“金额”的比例。我知道我可以使用 Pandas 的 resample('D', how='sum') 来计算 P (DailyP) 的每日总和,但在同一步骤中,我想使用每日 P 来计算每日 P 在每小时(因此,P/DailyP)以每小时时间序列结束(即,与原始频率相同)。我不确定这是否可以在 Pandas 术语中称为“重采样”。 从我对术语的使用中可能很明显,但我绝对是 Python 或编程的新手。如果有人可以建议一种方法来做到这一点,我将不胜感激。 谢谢!

【问题讨论】:

【参考方案1】:

一种可能的方法是将每日总和重新索引回原始小时索引 (reindex) 并向前填充值(这样每个小时都会获得当天总和的值,fillna):

df.resample('D', how='sum').reindex(df.index).fillna(method="ffill")

你可以用它来划分你的原始数据框。

一个例子:

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> df = pd.DataFrame('P' : np.random.rand(72), index=pd.date_range('2013-05-05', periods=72, freq='h'))
>>> df.resample('D', 'sum').reindex(df.index).fillna(method="pad")
                             P
2013-05-05 00:00:00  14.049649
2013-05-05 01:00:00  14.049649
...
2013-05-05 22:00:00  14.049649
2013-05-05 23:00:00  14.049649
2013-05-06 00:00:00  13.483974
2013-05-06 01:00:00  13.483974
...
2013-05-06 23:00:00  13.483974
2013-05-07 00:00:00  12.693711
2013-05-07 01:00:00  12.693711
..
2013-05-07 22:00:00  12.693711
2013-05-07 23:00:00  12.693711

【讨论】:

以上是关于熊猫将每小时时间序列重新采样为每小时比例时间序列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将 5 分钟数据重新采样为每小时平均值:日期问题 [重复]

每小时重新采样数据帧

将每一天绘制为每小时的时间序列

时间序列重采样错误 - 熊猫列中没有日期索引

按小时重新采样 Pandas DataFrame 并使用 Plotly 绘制堆积条形图

熊猫可能使用 groupby 和 resample 的错误