Pandas Панель данных - Линейная интерполяция значений на основе правил - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю с большой панелью данных финансовых ценностей. К сожалению, поскольку я взял данные из базы данных, информация получилась немного пятнистой (много значений NaN). То, что я хотел бы сделать, это заполнить пропущенные значения с помощью линейной интерполяции.

df выглядит примерно так (просто на примере двух компаний):

         year     ticker     tot_assets 
0        2001      ANTQ             NaN
1        2002      ANTQ             NaN
2        2003      ANTQ           14.56
3        2004      ANTQ           14.99
4        2005      ANTQ             NaN
5        1999      AMFD            2.44
6        2000      AMFD             NaN
7        2001      AMFD            1.89
8        2002      AMFD             NaN
9        2004      AMFD            3.78
10       2005      AMFD            3.82
..       ...        ...             ...

Как вы Как видно из примера, иногда NaN запускается в первый год доступных данных - поэтому я не уверен, рекомендуется ли вставлять ноль и интерполировать оттуда или можно выполнить обратную линейную интерполяцию.

Кроме того, как вы можете видеть из примера AMFD, иногда данные пропускаются несколько лет, поэтому было бы неплохо, если бы мы могли это учитывать.

Самая близкая вещь, которую я смог придумать, была:

df['tot_assets'] = df.groupby(['tic'])['tot_assets'].fillna(method = 'bfill')

Но, конечно, это не идеально, потому что это не очень хорошо решает проблемы, которые я упомянул.

Кроме того, я также пытался использовать и адаптировать уже имеющуюся документацию по интерполяции, но она не сработала - в основном потому, что я не очень опытен с Pandas.

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, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...