我想过滤掉每组“股票代码”中的列,以便剩下的只是在每个股票代码中我最近的时间戳之前正好 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/

10-12 19:58