Bien que Pandas ait des fonctionnalités de séries temporelles, je suis toujours aux prises avec des bases de données qui ont des données de séries temporelles incomplètes.Valeurs de décalage et différences dans les données pandas avec données trimestrielles manquantes
Voir les images ci-dessous, l'image inférieure a des données complètes, la partie supérieure a des lacunes. Les deux photos montrent des valeurs correctes. En rouge sont les colonnes que je veux calculer en utilisant les données en noir. Colonne Cumm_Issd
montre les actions émises cumulées au cours de l'année, MV
est la valeur marchande.
Je veux calculer les actions émises par trimestre (IssdQtr
), la variation trimestrielle valeur marchande (D_MV_Q
) et la MV
de l'année dernière (L_MV_Y
).
Voir pour les données cvs sous-jacentes ce link pour les données complètes et cette link pour les données gapped. Il y a deux entreprises 1020180
et 1020201
.
Cependant, lorsque j'essaie la méthode Pandas shift
, elle échoue quand il y a des lacunes, essayez-vous en utilisant les fichiers csv et le code ci-dessous. Toutes les colonnes (DiffEq, Dif1MV, Lag4MV
) diffèrent - pour certains trimestres - de IssdQtr, D_MV_Q, L_MV_Y
, respectivement.
Existe-t-il des moyens de gérer les lacunes dans les données à l'aide des 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)
données Gapped:
Données complètes:
Que voulez-vous faire avec vous des calculs quand il y a des lacunes? 'Pd.DataFrame.fillna (method = 'ffill')' est-il une option pour vous? –
Les espaces doivent être NaN –
Peut-être que vous pouvez vous en sortir avec 'dfg.groupby (['Firm']) ['MV'] .. fillna (np.nan) .shift (4)' alors. 'pandas' propage automatiquement les valeurs NaN dans des opérations comme celle-ci. –