大熊猫数据帧的滞后值和差异与季度数据丢失

时间:2017-03-20 02:35:59

标签: python pandas dataframe time-series financial

尽管Pandas具有时间序列功能,但我仍然在努力处理具有不完整时间序列数据的数据帧。

见下图,下图有完整数据,上面有间隙。两张照片都显示正确的值。红色是我想要使用黑色数据计算的列。第Cumm_Issd列显示了该年度累计已发行股票,MV为市场价值。

我想计算每季度的已发行股票(IssdQtr),市场价值的季度变化(D_MV_Q)和去年的MVL_MV_Y

请参阅基础cvs数据,此link表示完整数据,此link表示有缺口数据。有两家公司10201801020201

但是,当我尝试使用Pandas shift方法时,如果存在间隙则会失败,请尝试使用csv文件和下面的代码。所有列(DiffEq, Dif1MV, Lag4MV)在某些方面都有所不同 - 分别来自IssdQtr, D_MV_Q, L_MV_Y

有没有办法用Pandas处理数据空白?

import pandas as pd
import numpy as np
import os

dfg = pd.read_csv('example_soverflow_gaps.csv',low_memory=False)
dfg['date']     = pd.to_datetime(dfg['Period'], format='%Y%m%d')
dfg['Q']        = pd.DatetimeIndex(dfg['date']).to_period('Q')
dfg['year']     = dfg['date'].dt.year

dfg['DiffEq']    = dfg.sort_values(['Q']).groupby(['Firm','year'])['Cumm_Issd'].diff()
dfg['Dif1MV']    = dfg.groupby(['Firm'])['MV'].diff(1)
dfg['Lag4MV']    = dfg.groupby(['Firm'])['MV'].shift(4)

缺口数据:

enter image description here

完整数据:

enter image description here

1 个答案:

答案 0 :(得分:0)

使用合并解决了基本问题。首先,创建一个显示滞后日期或季度的变量。在这里我们想要去年的MV(4个季度回归):

from pandas.tseries.offsets import QuarterEnd 
dfg['lagQ'] = dfg['date'] + QuarterEnd(-4)

然后使用键(公司和日期)和相关变量(此处为MV)创建数据框。

lagset=dfg[['Firm','date', 'MV']].copy()
lagset.rename(columns={'MV':'Lag_MV', 'date':'lagQ'}, inplace=True)

最后,将新框架合并到现有框架中:

dfg=pd.merge(dfg, lagset,  on=['Firm', 'lagQ'], how='left')