繁体   English   中英

Python Pandas 对数据点之间的平均值进行上采样(15 分钟到 1 分钟)

[英]Python Pandas Upsampling on average values between data points (15min to 1min)

我在 Pandas 中的数据重采样有一些问题。 我正在尝试将 15 分钟值上采样到 1 分钟值。 重新采样的数据帧值应该包含原始数据帧的两个值之间的和分割相等。 此代码生成问题的提取。

import pandas as pd 
import numpy as np


dates = pd.DataFrame(pd.date_range(start="20190101",end="20200101", freq="15min"))
values = pd.DataFrame(np.random.randint(0,10,size=(35041, 1)))

df = pd.concat([dates,values], axis = 1)
df = df.set_index(pd.DatetimeIndex(df.iloc[:,0]))

print(df.resample("min").agg("sum").head(16))

这是一个示例输出:

2019-01-01 00:00:00  3
2019-01-01 00:01:00  0
2019-01-01 00:02:00  0
2019-01-01 00:03:00  0
2019-01-01 00:04:00  0
2019-01-01 00:05:00  0
2019-01-01 00:06:00  0
2019-01-01 00:07:00  0
2019-01-01 00:08:00  0
2019-01-01 00:09:00  0
2019-01-01 00:10:00  0
2019-01-01 00:11:00  0
2019-01-01 00:12:00  0
2019-01-01 00:13:00  0
2019-01-01 00:14:00  0
2019-01-01 00:15:00  3

显示为 0 的值应替换为两个值的总和(在此示例中:2019-01-01 00:00:00 3;和 2019-01-01 00:15:00 3)等于 6 和这应该在时间范围内均匀分布。

2019-01-01 00:00:00  6/15
2019-01-01 00:01:00  6/15
2019-01-01 00:02:00  6/15
2019-01-01 00:03:00  6/15
2019-01-01 00:04:00  6/15
2019-01-01 00:05:00  6/15
2019-01-01 00:06:00  6/15
2019-01-01 00:07:00  6/15
2019-01-01 00:08:00  6/15
2019-01-01 00:09:00  6/15
2019-01-01 00:10:00  6/15
2019-01-01 00:11:00  6/15
2019-01-01 00:12:00  6/15
2019-01-01 00:13:00  6/15
2019-01-01 00:14:00  6/15
2019-01-01 00:15:00  6/15

这应该针对整个 Dataframe 中的每个重采样组进行。 换句话说,原始数据帧和重新采样的数据帧的总和应该相等。 谢谢你的帮助。

我不确定我是否还能帮助你,但我认为它应该适用于你的价值的累积总和。 首先,就个人而言,如果只有一栏,我会建议使用系列。

series = pd.Series(index=pd.date_range(start="20190101",end="20200101", 
         freq="15min"), data=(np.random.randint(0,10,size=(35041,))).tolist())

然后,我将创建一个带有微小值的新索引,计算这些值的累积总和并在这些值之间进行插值。 在您的用例中,建议将“线性”作为插值方法:

beginning = series.index[0]
end = series.index[-1]
new_index = pd.date_range(start, end, freq="1T")

cumsum = series.cumsum()
cumsum = result.reindex(new_index)
cumsum = result.interpolate("linear")

之后,您会得到一个内插累积总和,您可以通过以下方式将其转换回您的搜索值:

series_upsampled = cumsum.diff()

如果你愿意,你可以将 series_upsampled 移动 1,做

series_upsampled = series_upsampled.shift(-1)

注意开始时的 NaN 值(或者如果您移动系列,则在最后)

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM