查询/筛选句点[QMAR]数据类型列

2024-06-16 13:44:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个period[Q-MAR]列,我想过滤最近一个财政年度的数据。在pandas中是否有任何方法可以过滤/查询period[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

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


Tags: 数据方法代码infopandasdfdatetimedate
1条回答
网友
1楼 · 发布于 2024-06-16 13:44:24

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

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

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

相关问题 更多 >