j'essaie de trouver la différence dans la valeur des actions du bilan trimestriel de la trame de données suivantes:Comment déterminer la différence entre les valeurs trimestrielles de ligne d'une trame de données de pandas géants en quartiers manquent
import pandas as pd
import numpy as np
df2= pd.DataFrame({'FirmID' : pd.Series(['ID001', 'ID001', 'ID001', 'ID001', 'ID001', 'ID001', 'ID001', 'ID001', 'ID001', 'ID001' ]),
'RSSD9999' : pd.Series([20060331, 20060630, 20060930, 20061231, 20070331,20070630, 20070930, 20080630, 20080930, 20081231]),
'year' : pd.Series([2006, 2006, 2006, 2006, 2007, 2007, 2007, 2008, 2008, 2008 ]),
'Q' : pd.Series([1, 2, 3, 4, 1, 2, 3, 2, 3, 4 ]),
'EquityEoQ' : pd.Series([112, 223, 333, 445, 126, 251, 376, 291, 291, 503 ]),
'NewEqRight': pd.Series([112, 111, 110, 112, 126, 125, 125, np.nan, 0 , 212, ])})
df2=df2[['FirmID','RSSD9999', 'year', 'Q', 'EquityEoQ','NewEqRight']]
Le cadre montre l'équité valeurs à la fin des trimestres par an: EquityEoQ
. Remarque, NewEqRight
affiche les valeurs comme il se doit, avec des valeurs manquantes pour 2007Q4 et 2008Q2.
Je peux trouver la variation des fonds propres par trimestre en prenant la différence entre les valeurs des lignes. Par exemple, la société ID001 a émis 111 nouveaux capitaux propres en 2006 T2 (111 = 223 - 112). Si toutes les lignes trimestrielles des données sont présentes, je peux utiliser shift
pour créer une nouvelle colonne avec les fonds propres du dernier trimestre (EquityEoLastQ) et une autre colonne qui enregistre la différence entre EquityEoQ et EquityEoLastQ pour obtenir la variation des capitaux propres:
df2['EquityEoLastQ'] = df2.groupby(['FirmID'])['EquityEoQ'].shift(1)
df2['NewEqWrong'] = df2['EquityEoQ']-df2['EquityEoLastQ']
df2.loc[df2['Q']==1, 'NewEqWrong'] = df2.loc[df2['Q']==1, 'EquityEoQ']
La dernière ligne corrige les valeurs de Q1.
Mais s'il manque des rangées trimestrielles, alors shift
est endommagé. Par exemple, dans la trame de données, les lignes pour 2007Q4 et 2008Q1 sont manquantes. Cela conduit à des informations incorrectes, car shift
fait référence au mauvais trimestre. Dans ce cadre, cette approche donne une valeur négative de NewEqWrong
pour 2008Q2 est -85,0, ce qui est la valeur erronée.
désiré ensemble de données:
In [9]: df2
Out[9]:
FirmID RSSD9999 year Q EquityEoQ NewEqRight EquityEoLastQ NewEqWrong
0 ID001 20060331 2006 1 112 112.0 NaN 112.0
1 ID001 20060630 2006 2 223 111.0 112.0 111.0
2 ID001 20060930 2006 3 333 110.0 223.0 110.0
3 ID001 20061231 2006 4 445 112.0 333.0 112.0
4 ID001 20070331 2007 1 126 126.0 445.0 126.0
5 ID001 20070630 2007 2 251 125.0 126.0 125.0
6 ID001 20070930 2007 3 376 125.0 251.0 125.0
7 ID001 20080630 2008 2 291 NaN 376.0 -85.0
8 ID001 20080930 2008 3 291 0.0 291.0 0.0
9 ID001 20081231 2008 4 503 212.0 291.0 212.0
Dans un Stata peut régler la fréquence des séries chronologiques à tous les trois mois, et ensuite utiliser L. ou D. pour trouver respectivement les retards et les différences.
Est-il possible pandas géants peuvent traiter ce problème, plus ou moins comme Stata?
Il serait beaucoup plus facile pour nous de vous aider si vous fournir un ensemble de données souhaitées ... – MaxU
Les données que je fournis illustre bien mon point. Je veux dire, les données d'origine contient environ 400 000 lignes. –
Ajout d'une colonne avec des données correctes « NewEqRight » –