我想过滤掉每组“股票代码”中的列,以便剩下的只是在每个股票代码中我最近的时间戳之前正好 1、2、3 年等的行。例如:
数据
index date ticker dividends
0 3/31/2019 AA 0.626
1 12/31/2018 AA 0.611
2 9/30/2018 AA 0.611
3 6/30/2018 AA 0.04
4 3/31/2018 AA 0.035
5 12/31/2017 AA 0.02
6 12/31/2018 CC 0.035
7 6/30/2018 CC 0.075
8 12/31/2017 CC 0.04
9 12/31/2016 CC 0.035
10 12/31/2015 CC 0.04
11 6/30/2015 CC 0.06
我想要:
index date ticker dividends
0 3/31/2019 AA 0.626
4 3/31/2018 AA 0.035
6 12/31/2018 CC 0.035
8 12/31/2017 CC 0.04
9 12/31/2016 CC 0.035
10 12/31/2015 CC 0.04
我已经用 data.groupby('ticker').filter 搞砸了一段时间......但我只是想不出一个 pythonic 的方法来做到这一点,特别是考虑到每组 'ticker' 中最新的日期并不总是相同的,并且每组中日期之间的间距不同。
最佳答案
从您的日期列创建一个日期系列:
d = pd.to_datetime(df['date'])
取每个股票代码的最近日期:
r = d.groupby(df['ticker']).transform('max')
从您的 DF 中取出月/日分量相同的行:
new_df = df[d.dt.month.eq(r.dt.month) & d.dt.day.eq(r.dt.day)]
这给你:
date ticker dividends
index
0 3/31/2019 AA 0.626
4 3/31/2018 AA 0.035
6 12/31/2018 CC 0.035
8 12/31/2017 CC 0.040
9 12/31/2016 CC 0.035
10 12/31/2015 CC 0.040
关于python - 过滤掉不是前一年精确倍数的组中的数据框行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56512839/