首页 > 解决方案 > 将值重采样为更小的值

问题描述

2020-04-02 00:00:00+03:00    32.7171
2020-04-02 00:15:00+03:00        NaN
2020-04-02 00:30:00+03:00        NaN
2020-04-02 00:45:00+03:00        NaN
2020-04-02 01:00:00+03:00    70.2465
2020-04-02 01:15:00+03:00        NaN
2020-04-02 01:30:00+03:00        NaN
2020-04-02 01:45:00+03:00        NaN

我有这种类型的数据框,它显示 00:00:00 -> 01:00:00 和 01:00:00 -> 02:00:00 小时之间的太阳能生产

我需要在各自的时间分配值 32.7171 和 70.2465,这意味着 00:00:00 -> 01:00:00 之间的值的总和不应大于 32.7171,因为这是将产生的总能量在那个完整的小时内,01:00:00 -> 02:00:00 之间的间隔也是如此

最简单的情况是我将 32.7171 和 70.2465 均分为 4 个部分,并将值分配给相应的行(每 15 分钟 1 小时 4 行)

插值只是填充 NaN,并且 1 小时间隔之间的值的总和不正确。scipy 重采样也是如此。

有没有更好的解决方案来实现这一目标?

标签: pythonpandasdataframedata-analysis

解决方案


我会按小时分组并转换意味着:

df['time'] = pd.to_datetime(df['time'])

df['value'] = (df['value'].fillna(0)
                   .groupby(df['time'].dt.floor('H'))
                   .transform('mean')

输出:

                       time      value
0 2020-04-02 00:00:00+03:00   8.179275
1 2020-04-02 00:15:00+03:00   8.179275
2 2020-04-02 00:30:00+03:00   8.179275
3 2020-04-02 00:45:00+03:00   8.179275
4 2020-04-02 01:00:00+03:00  17.561625
5 2020-04-02 01:15:00+03:00  17.561625
6 2020-04-02 01:30:00+03:00  17.561625
7 2020-04-02 01:45:00+03:00  17.561625

推荐阅读