Хотя у Pandas есть функциональные возможности временных рядов, я все еще борюсь с кадрами данных, которые содержат неполные данные временных рядов.
Смотрите рисунки ниже, на нижнем изображении есть полные данные, на верхнем есть пробелы. На обоих фото указаны правильные значения. Красным цветом показаны столбцы, которые я хочу рассчитать, используя данные черного цвета. Столбец Cumm_Issd
показывает накопленное количество выпущенных акций в течение года, MV
- рыночная стоимость.
Я хочу рассчитать количество выпущенных акций за квартал (IssdQtr
), ежеквартальное изменение рыночной стоимости (D_MV_Q
) и MV
прошлого года (L_MV_Y
).
Базовые данные cvs см. по этой ссылке для полных данных и по этой ссылка для пробелов в данных. Есть две фирмы 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')
вариант? - person Aleksey Bilogur   schedule 20.03.2017dfg.groupby(['Firm'])['MV']..fillna(np.nan).shift(4)
.pandas
автоматически распространяет значения NaN в операциях, подобных этой. - person Aleksey Bilogur   schedule 20.03.2017