将季度数据框转换为每月数据并填充熊猫中的缺失值

时间:2019-10-31 06:34:58

标签: python pandas dataframe

对于像这样的季度数据框:

        date      gdp  rate
0   2003/3/1   523.82   0.1
1   2003/6/1  1172.83   0.2
2   2003/9/1  1882.48   0.4
3  2003/12/1  3585.72   0.1
4   2004/3/1   706.77   0.2

我想填写缺失的月份,然后每个月回填gdprate,并获得如下数据框:

       date      gdp  rate
0   2003-03   523.82   0.1
1   2003-04  1172.83   0.2
2   2003-05  1172.83   0.2
3   2003-06  1172.83   0.2
4   2003-07  1882.48   0.4
5   2003-08  1882.48   0.4
6   2003-09  1882.48   0.4
7   2003-10  3585.72   0.1
8   2003-11  3585.72   0.1
9   2003-12  3585.72   0.1
10  2004-01   706.77   0.2
11  2004-02   706.77   0.2
12  2004-03   706.77   0.2

如何在熊猫中做到这一点?谢谢。

2 个答案:

答案 0 :(得分:1)

另一种解决方案是创建DatetimeIndex,然后将method='bfill'MSDataFrame.asfreq一起使用,并以DataFrame.to_period最后转换为期间:

df['date'] = pd.to_datetime(df['date'])
df = df.sort_values(by=['date'], ascending=[True])
df.set_index('date', inplace=True)

df = df.asfreq('MS', method='bfill').to_period('M').reset_index()
print (df)
       date      gdp  rate
0   2003-03   523.82   0.1
1   2003-04  1172.83   0.2
2   2003-05  1172.83   0.2
3   2003-06  1172.83   0.2
4   2003-07  1882.48   0.4
5   2003-08  1882.48   0.4
6   2003-09  1882.48   0.4
7   2003-10  3585.72   0.1
8   2003-11  3585.72   0.1
9   2003-12  3585.72   0.1
10  2004-01   706.77   0.2
11  2004-02   706.77   0.2
12  2004-03   706.77   0.2

答案 1 :(得分:0)

这有效:

import pandas as pd

df['date'] = pd.to_datetime(df['date']).dt.to_period('M')
# df['date'] =  pd.to_datetime(df['date'], format='%Y/%m/%d')
df = df.sort_values(by=['date'], ascending=[True])
df.set_index('date', inplace=True)

df = df.resample('M').bfill().reset_index()
print(df)

输出:

       date      gdp  rate
0   2003-03   523.82   0.1
1   2003-04  1172.83   0.2
2   2003-05  1172.83   0.2
3   2003-06  1172.83   0.2
4   2003-07  1882.48   0.4
5   2003-08  1882.48   0.4
6   2003-09  1882.48   0.4
7   2003-10  3585.72   0.1
8   2003-11  3585.72   0.1
9   2003-12  3585.72   0.1
10  2004-01   706.77   0.2
11  2004-02   706.77   0.2
12  2004-03   706.77   0.2