Pandas Панель данных - Отстающие переменные с учетом разницы в год - PullRequest
1 голос
/ 13 апреля 2020

Я работаю с большой панелью данных финансовой информации, однако значения немного нестабильны. Я пытаюсь добиться отставания определенных переменных моего фрейма данных, чтобы значения в момент времени t-1 совпадали со значениями в момент времени t.

Обычно, чтобы отстать от переменной, я использовал бы df.groupby('tic')['investments'].shift(), однако это явно дало бы неправильный ответ, так как возможный пропущенный год в моем df мог привести к неправильной временной задержке. Чтобы дать вам представление, df выглядит примерно так (просто приведу пример):

       datadate    fyear    ticker    tot_a    debt
0    31/12/1998     1998      AAPL   188.92   32.44
1    31/12/1999     1999      AAPL   197.44   56.09
2    31/12/2002     2002      AAPL   268.13   89.72
3    31/12/2003     2003      AAPL   278.06   96.32
4    31/12/2004     2004      AAPL   288.35   94.21
5    31/12/2005     2005      AAPL   312.23   84.21
6    31/05/2008     2008      TSLA    45.67    2.56
7    31/05/2009     2009      TSLA    38.29    2.90
8    31/05/2010     2010      TSLA    42.89    4.89
9    31/05/2011     2011      TSLA    56.03    3.78
10   31/05/2014     2014      TSLA   103.45   12.33
..       ...            ..       ..        

Я ищу фрагмент кода, который позволил бы мне понять (для каждой отдельной фирмы) если в данных есть какой-либо пробел, и запаздывайте указанные переменные в момент времени t-1, если не возникает пробел, или вставьте NaN, если он есть. Вот так:

       datadate    fyear    ticker    tot_a    debt
0    31/12/1998     1998      AAPL      NaN     NaN
1    31/12/1999     1999      AAPL    188.92  32.44
2    31/12/2002     2002      AAPL      NaN     NaN
3    31/12/2003     2003      AAPL    268.13  89.72
4    31/12/2004     2004      AAPL    278.06  96.32
5    31/12/2005     2005      AAPL    288.35  94.21
6    31/05/2008     2008      TSLA       NaN    NaN
7    31/05/2009     2009      TSLA     45.67   2.56
8    31/05/2010     2010      TSLA     38.29   2.90
9    31/05/2011     2011      TSLA     42.89   4.89
10   31/05/2014     2014      TSLA      NaN     NaN
..       ...            ..       ..        

Я надеюсь, что вопросы имеют смысл!

Заранее спасибо, ребята :)

1 Ответ

0 голосов
/ 14 апреля 2020
for i in range(1, len(df)):
if (df.loc[i, 'ticker']==df.loc[i-1, 'ticker']) & (df.loc[i, 'fyear']==df.loc[i-1, 'fyear']+1):
    df.loc[i, 'tot_a_1'] = df.loc[i-1, 'tot_a']
else:
    df.loc[i, 'tot_a_1'] = None

Вот мой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...