对复杂的Pandas数据帧进行重新索引和插值

时间:2018-01-16 22:30:16

标签: python pandas

我有一个pandas数据框,如下所示:

import pandas as pd
df= pd.DataFrame({'Date':['2016-12-31','2018-12-31','2017-06-30','2019-06-30',],'Business':['FRC','FICC','FRC','FICC']\
              ,'Amount':[10,100,20,200]})
df
   Amount Business        Date
0      10      FRC  2016-12-31
1     100     FICC  2018-12-31
2      20      FRC  2017-06-30
3     200     FICC  2019-06-30

我想使用重新索引和插值函数来获取输出,例如:

import pandas as pd
df= pd.DataFrame({'Date':['2016-12-31','2018-12-31','2017-06-30','2019-06-30','2017-03-31','2019-03-31'],'Business':['FRC','FICC','FRC','FICC','FRC','FICC']\
              ,'Amount':[10,100,20,200,15,150]})
df
   Amount Business        Date
0      10      FRC  2016-12-31
1     100     FICC  2018-12-31
2      20      FRC  2017-06-30
3     200     FICC  2019-06-30
4      15      FRC  2017-03-31
5     150     FICC  2019-03-31

本质上,我需要将数据帧划分为两个簇,并分别对每个簇使用插值函数。因此,FRC簇的插值为15,FICC簇的插值为150

1 个答案:

答案 0 :(得分:1)

您可以先对数据进行分组,然后使用resampleinterpolate来设置值。

out = pd.DataFrame()
businesses = df.groupby('Business')
for idx, business in businesses:
    name = business.Business.unique()[0]
    temp = business.set_index('Date').resample('3M').interpolate()
    temp.Business = name
    out = out.append(temp)
out = out.reset_index(drop=True)
out
        Date  Amount Business
0 2018-12-31   100.0     FICC
1 2019-03-31   150.0     FICC
2 2019-06-30   200.0     FICC
3 2016-12-31    10.0      FRC
4 2017-03-31    15.0      FRC
5 2017-06-30    20.0      FRC

我根据您的示例解释了3个月的重新采样率,但如果您的实际数据略有不同,您可以设置一些逻辑来计算感兴趣的时间间隔(天,月,年......)并使用那是你的重新采样时期。