如何从下个月的15号开始线性插值每月数据

2024-04-23 06:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个每月的数据集,我想每天插值。但是,我需要从每个月的15日或月中(1月16日,2月14日,3月15日…)插入到下一个月。你知道吗

Here is my data set: 

2000-01-31  0.02451
2000-02-28  0.03392
2000-03-31  0.15451
2000-04-30  0.28366
2000-05-31  0.46806
2000-06-30  0.67766
...

第一:我需要每个月中设置这些值。你知道吗

2000-01-16  0.02451
2000-02-14  0.03392
2000-03-16  0.15451
2000-04-15  0.28366
2000-05-16  0.46806
2000-06-15  0.67766

第二:然后每天插值

2000-01-16  0.02451
2000-01-17
2000-01-18
...
2000-01-31
2000-02-01
2000-02-02
...

2000-02-14  0.03392

我可以使用以下代码对每月1日到31日进行插值:

### Linear interpolation from monthly values to daily
import pandas as pd

df.set_index(pd.date_range(start='1/1/2000', end='1/1/2010', freq='M'), inplace=True, drop=True)
rng = pd.date_range(start='1/1/2000', end='1/1/2010', freq='D')
df2 = df.reindex(rng, axis=0).interpolate(axis=0)

结果

RESULTS                EXPECTED RESULTS 
2000-01-31  0.02451    2000-01-16   0.02451
2000-02-01  0.02485    2000-02-17   0.02485
2000-02-02  0.02518    2000-02-18   0.02518
...
2000-02-26  0.03325    2000-02-12   0.03325
2000-02-27  0.03359    2000-02-13   0.03359
2000-02-28  0.03392    2000-02-14   0.03392

任何帮助都将不胜感激!你知道吗


Tags: 数据truedfdatehererangestartresults
1条回答
网友
1楼 · 发布于 2024-04-23 06:45:56

我会这么做:

# offset the timestamp
df[0] -= pd.to_timedelta(df[0].dt.day//2, unit='d')

这给了你

           0        1
0 2000-01-16  0.02451
1 2000-02-14  0.03392
2 2000-03-16  0.15451
3 2000-04-15  0.28366
4 2000-05-16  0.46806
5 2000-06-15  0.67766

你可以插值:

df.set_index(0).asfreq('D').interpolate()

相关问题 更多 >