2017-03-20 63 views
0

尽管熊猫有时间序列功能,但我仍在努力处理具有不完整时间序列数据的数据帧。滞后值和大熊猫数据帧与缺失季度数据的差异

看下面的图片,下面的图片有完整的数据,上面有空白。两张照片都显示正确的值。红色是我想用黑色数据计算的列。 Cumm_Issd列显示年内累计已发行股数,MV为市场价值。

我想要计算每个季度(IssdQtr)已发行股份,市值(D_MV_Q)的季度变化,去年(L_MV_Y)的MV

查看基础CVS数据,该数据为link,空位数据为link。有两家公司10201801020201

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

有没有办法处理使用熊猫的数据差距?

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

你想在你计算时有差距,怎么办?是'pd.DataFrame.fillna(method ='ffill')'给你一个选项吗? –

+0

缺口应该是NaN –

+0

也许你可以用'dfg.groupby(['Firm'])['MV'] .. fillna(np.nan).shift(4)''离开。 'pandas'自动在像这样的操作中传播NaN值。 –

回答

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') 
+0

或者按照这个问题:https://stackoverflow.com/questions/23664877/pandas-equivalent-of-oracle-lead-lag-function –