【发布时间】:2017-08-11 05:19:05
【问题描述】:
虽然 Pandas 具有时间序列功能,但我仍然在处理时间序列数据不完整的数据帧。
见下图,下图数据完整,上图有缺口。两张图片都显示正确的值。红色是我想使用黑色数据计算的列。 Cumm_Issd栏为当年累计发行股数,MV为市值。
我想计算每季度的已发行股数 (IssdQtr)、市值的季度变化 (D_MV_Q) 和去年的MV (L_MV_Y)。
有关基础 cvs 数据,请参阅 link 获取完整数据,查看 link 获取空白数据。有两个公司1020180和1020201。
但是,当我尝试 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)
差距数据:
完整数据:
【问题讨论】:
-
当有差距时,你想对你的计算做什么?
pd.DataFrame.fillna(method='ffill')适合您吗? -
间隙应该是NaN
-
也许你可以摆脱
dfg.groupby(['Firm'])['MV']..fillna(np.nan).shift(4)。pandas在类似这样的操作中自动传播 NaN 值。
标签: python pandas dataframe time-series financial