Pandas-查询/筛选周期[Q-MAR]数据类型列



我有一个期间[Q-MAR]列,我想过滤最近一个会计年度的数据。pandas中是否有过滤/查询周期[Q-MAR]数据类型列的方法。以下是创建所需数据帧的代码:

import datetime
import pandas as pd
df = pd.DataFrame([datetime.date(2019, 10, 25), datetime.date(2019, 6, 25),
datetime.date(2020, 3, 25), datetime.date(2018, 10, 25),
datetime.date(2017, 10, 25), datetime.date(2018, 6, 25),
datetime.date(2017, 10, 25), datetime.date(2019, 7, 25)],
columns=['dates'])
df['dates'] = pd.to_datetime(df['dates'])
df['quater_info'] = pd.PeriodIndex(df['dates'], freq='Q-MAR')
print(df)

输出:

dates       quater_info
0   2019-10-25  2020Q3
1   2019-06-25  2020Q1
2   2020-03-25  2020Q4
3   2018-10-25  2019Q3
4   2017-10-25  2018Q3
5   2018-06-25  2019Q1
6   2017-10-25  2018Q3
7   2019-07-25  2020Q2

以下是我为获取最近财政年度的数据而编写的代码:

print(df[df['quater_info'].astype(str).str.contains(str(df['quater_info'].max().year))])

输出:

dates       quater_info
0   2019-10-25  2020Q3
1   2019-06-25  2020Q1
2   2020-03-25  2020Q4
7   2019-07-25  2020Q2

有没有更好的方法可以查询panda中的period[Q-MAR]dtype列。谢谢

我不确定您是否需要转换为字符串:

max_year = df.quater_info.dt.qyear.max()
df[df.quater_info.dt.qyear.eq(max_year)]

输出:

dates quater_info
0 2019-10-25      2020Q3
1 2019-06-25      2020Q1
2 2020-03-25      2020Q4
7 2019-07-25      2020Q2

除此之外,我认为没有更快/更短的方法。

最新更新