使用Pandas计算数据帧中丢失数据的时间序列数据的每周百分比变化



我有财务数据,试图计算两个连续thursday之间的值变化百分比。有时,由于假日在Thursday上,本周的每周数据不存在,所以我想从ThursdayWednesday计算该周的pct_change,因为数据帧中不存在Thursday数据。

可复制代码-

# !pip install investpy
import pandas as pd
import investpy
from datetime import datetime
df = investpy.get_index_historical_data(index="Nifty 50",country="India",from_date=("23/03/2022"),to_date= "23/04/2022")
df['weekday'] = df.index.day_name()
df = df.loc[:, ['Close', 'weekday']]
df.tail(10)

输出-

Close      weekday
Date        
2022-04-07  17639.55    Thursday
2022-04-08  17784.35    Friday
2022-04-11  17674.95    Monday
2022-04-12  17530.30    Tuesday
2022-04-13  17475.65    Wednesday
2022-04-18  17173.65    Monday
2022-04-19  16958.65    Tuesday
2022-04-20  17136.55    Wednesday
2022-04-21  17392.60    Thursday
2022-04-22  17171.95    Friday

df.tail(10)中,缺少14-Apr-2022日期,因为它是holiday,所以在这种情况下,我想计算ThursdayWednesday之间的pct_change

我以前用来计算pct_return 的代码

weekly_pct_change = df.loc[df['weekday'] == 'Thursday']
weekly_pct_change['pct_change']= np.log(1+weekly_pct_change['Close'].pct_change())*100
weekly_pct_change

输出-

Close      weekday    pct_change
Date            
2022-03-24  17222.75    Thursday    NaN
2022-03-31  17464.75    Thursday    1.395338
2022-04-07  17639.55    Thursday    0.995898
2022-04-21  17392.60    Thursday    -1.409871

Onde的想法是通过DataFrame.asfreqmethod='ffill'添加缺少的日期时间,然后通过DatetimeIndex.day_name:重新分配日期名称

df1 = df.asfreq('B', method='ffill')
df1['weekday'] = df1.index.day_name()
print (df1.tail(10))
Close    weekday
Date                           
2022-04-11  17674.95     Monday
2022-04-12  17530.30    Tuesday
2022-04-13  17475.65  Wednesday
2022-04-14  17475.65   Thursday
2022-04-15  17475.65     Friday
2022-04-18  17173.65     Monday
2022-04-19  16958.65    Tuesday
2022-04-20  17136.55  Wednesday
2022-04-21  17392.60   Thursday
2022-04-22  17171.95     Friday
weekly_pct_change = df1.loc[df1['weekday'] == 'Thursday'].copy()
weekly_pct_change['pct_change']= np.log(1+weekly_pct_change['Close'].pct_change())*100
print(weekly_pct_change)
Close   weekday  pct_change
Date                                      
2022-03-24  17222.75  Thursday         NaN
2022-03-31  17464.75  Thursday    1.395338
2022-04-07  17639.55  Thursday    0.995898
2022-04-14  17475.65  Thursday   -0.933506
2022-04-21  17392.60  Thursday   -0.476366

最新更新