Сопоставление данных панели в момент времени t-1 и времени t Python Pandas - PullRequest
0 голосов
/ 11 апреля 2020

В настоящее время я работаю над проектом, связанным с финансовыми данными. У меня есть фрейм данных, содержащий ряд фундаментальных переменных, а также доходность акций для разных компаний, например:

           year     ticker      tot_assets      return
0          1999       AAPL          10.345      0.1294
1          2000       AAPL          10.988      0.1577
2          2001       AAPL          12.003      0.0782
..          ...        ...             ...         ...
34521      2017       GMBO           0.893      0.2209
34522      2018       GMBO           1.206      0.1001
..          ...        ...             ...         ...
200344     2012         ZZ           3.789      0.0032
200344     2013         ZZ           3.021     -0.0346

То, что я пытался сделать без успеха, - это сопоставить каждую компанию ticker с другим в df на основе ближайшего значения tot_assets в год t-1. Таким образом, создайте две новые колонки, где у одной есть ticker соответствующей компании, а также returns в момент времени t. Таким образом, мы выполняем сопоставление в момент времени t-1, но сообщаемые результаты относятся к моменту времени t.

Так что это должно выглядеть примерно так:

           year     ticker   tot_assets   return   m_ticker   m_return 
0          1999       AAPL       10.345   0.1294         AA     0.0890     
1          2000       AAPL       10.988   0.1577         AA     0.1666     
2          2001       AAPL       12.003   0.0782       TSLA     0.3470
..          ...        ...          ...      ...        ...        ...
34521      2017       GMBO        0.893   0.2209        AIR     0.0032
34522      2018       GMBO        1.206   0.1001       CECE     0.1123
..          ...        ...          ...      ...        ...        ...
200344     2012         ZZ        3.789   0.0032       ASKI     0.0432
200344     2013         ZZ        3.021  -0.0346       ASKI     0.0339

Надеюсь, я достаточно ясно в моем объяснении: P Может быть, это причина, почему у меня были проблемы! Я не могу показать вам df, потому что он имеет более 200 000 наблюдений, но я надеюсь, что приведенные выше концепции помогут:)

Заранее спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Это должно дать вам тикер фирмы с ближайшим соответствием tot_assets в год - 1. Надеюсь, вам нужно будет запустить его только один раз, чтобы создать набор данных. В противном случае вам придется исследовать более быстрые альтернативы.

import numpy as np

def closest_match(row, df):
    '''Uses absolute values and argmin to find closest match'''
    try:
        last_year = df.loc[df.year == row.year - 1, :]
        absvals = np.abs(last_year['tot_assets'] - row.tot_assets)
        return last_year.iloc[absvals.argmin(), last_year.columns.get_loc('ticker')]
    except Exception as e:
        return None

df['ticker_closest_tot_assets'] = df.apply(closest_match, args=(df,), axis=1)
# then look up return based on year, ticker_closest_tot_assets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...