Панельные данные - держите компании, у которых есть данные по крайней мере за 3 года в Pandas - PullRequest
2 голосов
/ 11 апреля 2020

Я работаю с большой панелью данных финансовых ценностей, где у меня много компаний (и их фундаментальных ценностей) на протяжении многих лет. Df выглядит примерно так:

        year     ticker     return_y
0       1985      VLID       -0.5838
1       1985        KO        0.3245
2       1994       CTL       -0.3063
3       1996      DRYR       -0.1607
..       ...       ...           ...
1356    2002      CHUX       -0.2456
1357    1987       HRL       -0.0233
1358    2015        KO        0.2343
..       ...       ...           ...
56798   2017      AFMXF       0.0558
56799   2014        TER       0.0134

Я знаю, что некоторые фирмы сообщают об этом только один или два года, и я боюсь, что они приведут к некоторым ошибкам в моем анализе. Поэтому я хотел бы сохранить только те фирмы, у которых есть как минимум 3 года - может кто-нибудь помочь мне найти способ сделать это?

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

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете позаботиться об этом в одной строке: вызвать groupby.filter() с лямбдой:

df.groupby(df.ticker).filter(lambda x: len(x) > 2)
1 голос
/ 12 апреля 2020

Там может быть более короткий путь там. Моя попытка; Предполагая, что для каждой группы существует один год, я бы создал новый столбец, который нумерует каждую группу от 1 с помощью цепочки groupby до cumcount

df['group']=df.groupby(['ticker']).cumcount()+1
df2=df[df['group']>=3]
df2

Найдите максимум в каждой группе и отбросьте все, что имеет максимум менее 3

df['group']=df.groupby(['ticker']).cumcount()+1
df['Max']=df.groupby('ticker')['group'].transform('max')
df[df['Max']>=3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...