如何使用 pandas resample using 'day of year' data (Python)

How to use pandas resample using 'day of year' data (Python)

我的 pandas 数组看起来像这样...

     DOY Value
0      5  5118
1     10  5098
2     15  5153

我一直在尝试对我的数据重新采样并使用 pandas 重新采样函数填补空白。我担心的是,由于我尝试在不使用直接日期时间值的情况下重新采样,因此我将无法对数据进行重新采样。

我尝试使用以下代码行来解决此问题,但出现错误提示我正在使用范围索引。也许我需要以某种方式使用 Period Index,但我不确定该怎么做。

inter.resample('1D').mean().interpolate()

这是我的预期结果

     DOY Value
0      5  5118
1      6  5114
2      7  5110
3      8  5106
4      9  5102
5     10  5098
:      :    :
10    15  5153

pd.DataFrame.interpolate 作用于索引。因此,让我们从设置一个适当的索引开始,然后设置一个我们将在其上进行插值的新索引。

d0 = df.set_index('DOY')
idx = pd.RangeIndex(d0.index.min(), d0.index.max()+1, name='DOY')

d0.reindex(idx).interpolate().reset_index()

      DOY   Value
0       5  5118.0
1       6  5114.0
2       7  5110.0
3       8  5106.0
4       9  5102.0
5      10  5098.0
6      11  5109.0
7      12  5120.0
8      13  5131.0
9      14  5142.0
10     15  5153.0

转换 to_datetime,执行 resample,然后删除不需要的列:

df["date"] = pd.to_datetime(df["DOY"].astype(str),format="%j")
output = df.resample("D", on="date").last().drop("date", axis=1).interpolate().reset_index(drop=True)

>>> output
     DOY   Value
0    5.0  5118.0
1    6.0  5114.0
2    7.0  5110.0
3    8.0  5106.0
4    9.0  5102.0
5   10.0  5098.0
6   11.0  5109.0
7   12.0  5120.0
8   13.0  5131.0
9   14.0  5142.0
10  15.0  5153.0