首页 > 解决方案 > Pandas - 查询/过滤周期[Q-MAR] dtype列

问题描述

我有一个 period[Q-MAR] 列,我想过滤最近一个会计年度的数据。是否有任何方法pandas可以过滤/查询 period[Q-MAR] dtype 列。以下是创建所需数据框的代码:

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

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

标签: pythonpandas

解决方案


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

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

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


推荐阅读