gpt4 book ai didi

python - 如何根据DataFrame中下一周期的观察来过滤观察

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:46 24 4
gpt4 key购买 nike

数据::

Unnamed: 0  gvkey  date  CUSIP  conm  tic  cik  PERMNO  COMNAM

0
0 1001 1983 00016510 A & M FOOD SERVICES INC AMFD. 723576.0 10015 NaN

1
1 1001 1983 00016510 A & M FOOD SERVICES INC AMFD. 723576.0 10015 A & M FOOD SERVICES INC

2
5 1001 1984 00016510 A & M FOOD SERVICES INC AMFD. 723576.0 10015 A & M FOOD SERVICES INC

3
17 1001 1985 00016510 A & M FOOD SERVICES INC AMFD. 723576.0 10015 A & M FOOD SERVICES INC

4
29 1003 1983 00035410 A.A. IMPORTING CO INC ANTQ 730052.0 10031 NaN

目标::

获取当年特定观测的 PERMNO(数据)

条件::

  1. 观察有 gvkey 数据
  2. 明年对该 gvkey 的观察有“COMNAM”变量的数据

例如;年 = 1983,gvkey = 1001,next_year = 1984

我尝试过的::

df = DATA
df[(df['date'] == year) & (df['date'] == gvkey) & (df[df['date'] == next_year]['COMNAM'].isna() != 1])]

但是,它返回,NO OBSERVATIONS..

我认为这是因为代码包含两个互斥的条件::df['date'] == Year 和 df['date'] == next_year

谁能给我建议吗?谢谢!

最佳答案

确保使用一致的掩码索引

pd.Series.isna 返回一个系列,而不是 bool 值。重要的是,因为您首先通过 df[df['date'] == next_year] 应用过滤器 bool 系列将不会具有与前两个蒙版相同的索引。

不要使用链式索引

您应该避免链式索引,即 explicitly discouraged in the docs 。相反,您可以找到范围内的年份,然后使用 pd.Series.isin 。最后,为了便于阅读,我建议您组合多个掩码:

m1 = df['date'].eq(year)
m2 = df['gvkey'].eq(gvkey)

viable_years = df.loc[m2 & df['COMNAM'].notnull(), 'date'].values # returns in-scope years

m3 = (df['date'] + 1).isin(viable_years) # check next year is a good year

res = df[m1 & m2 & m3]

关于python - 如何根据DataFrame中下一周期的观察来过滤观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52578749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com