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

geo*_*bie 4 time-series resampling pandas

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

jor*_*ris 5

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

df.resample('D', how='sum').reindex(df.index).fillna(method="ffill")
Run Code Online (Sandbox Code Playgroud)

您可以使用它来划分原始数据框。

一个例子:

>>> 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
Run Code Online (Sandbox Code Playgroud)