面板数据 - 保留至少 3 年数据的公司 Pandas
Panel data - Keep companies which have at least 3 years of data in Pandas
我正在处理与财务相关价值的 df 大型面板数据,其中我有许多公司(及其基本价值)多年来。
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 年的公司 - 谁能帮我找到办法做到这一点?
提前致谢!
也许还有一条更短的路。我的尝试;
假设每个组有一年,我将创建一个新列,通过将 groupby 链接到 cumcount
从 1 开始对每个组进行编号
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]
您可以在一行中解决这个问题:使用 lambda 调用 groupby.filter()
:
df.groupby(df.ticker).filter(lambda x: len(x) > 2)
我正在处理与财务相关价值的 df 大型面板数据,其中我有许多公司(及其基本价值)多年来。 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 年的公司 - 谁能帮我找到办法做到这一点?
提前致谢!
也许还有一条更短的路。我的尝试; 假设每个组有一年,我将创建一个新列,通过将 groupby 链接到 cumcount
从 1 开始对每个组进行编号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]
您可以在一行中解决这个问题:使用 lambda 调用 groupby.filter()
:
df.groupby(df.ticker).filter(lambda x: len(x) > 2)