如何使用 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
我的 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