将年度数据重新采样为具有远期价值的每日数据

时间:2020-10-22 10:20:11

标签: pandas dataframe pandas-resample

我有2个数据帧(一个df且在系列中)。他们看起来像这样:

ranking 

Date        type
2009-12-31  AAB000001471      Q2
            AAB000001513      Q1
            AAB000002057      Q2
            AAB000002164      Q2
            AAB000003162      Q2
                              ..
2020-12-31  AAB013530250      Q1
            AAB013530706      Q1
            AAB013531035      Q1
            AAB135329261      Q1
            AAB013536471      Q2
Name: Actif_net_part, Length: 59621, dtype: category
Categories (4, object): ['Q1' < 'Q2' < 'Q3' < 'Q4']

和:

base 

    Date    type
0   2020-10-06  AAB000006710
1   2020-09-22  AAB000006710
2   2020-09-08  AAB000006710
3   2020-08-25  AAB000006710
4   2020-02-25  AAB000006710
... ... ...
11477259    2019-05-15  AAB013282712
11477260    2019-05-14  AAB013282712
11477261    2019-05-13  AAB013282712
11477262    2019-05-10  AAB013282712
11477263    2019-05-09  AAB013282712
11477264 rows × 2 columns

第一个是年度数据,而第二个是每日数据。 我想基于type / Date列合并这两个类,但是对于年度数据,请创建具有向前数据的每日数据。我的意思是: 2009-12-31 AAB000001471第二季度 2010-01-01 AAB000001471 Q2 .... 直到今年底我有了新的价值

我尝试过:

ddd = ranking.groupby(['type', pd.Grouper(level=0, freq='D')]).apply(lambda x: x.fillna(method='ffill'))

,但是它不起作用。我仍然有年度数据

谢谢

1 个答案:

答案 0 :(得分:0)

GroupBy.applyDataFrame.asfreq一起使用:

print (ranking)
Date        type        
2009-12-31  AAB000001471    Q2
            AAB000001513    Q1
            AAB000002057    Q2
            AAB000002164    Q2
            AAB000003162    Q2
2020-12-31  AAB000001471    Q1
            AAB000001513    Q1
            AAB000002057    Q1
            AAB000002164    Q1
            AAB000003162    Q2
Name: Actif_net_part, dtype: object

ddd = (ranking.reset_index(level=1)
              .groupby('type', group_keys=False)
              .apply(lambda x: x.asfreq('d', method='ffill'))
              .set_index('type', append=True)
              .sort_index())
print (ddd)
                        Actif_net_part
Date       type                       
2009-12-31 AAB000001471             Q2
           AAB000001513             Q1
           AAB000002057             Q2
           AAB000002164             Q2
           AAB000003162             Q2
...                                ...
2020-12-31 AAB000001471             Q1
           AAB000001513             Q1
           AAB000002057             Q1
           AAB000002164             Q1
           AAB000003162             Q2

[20095 rows x 1 columns]