python - 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 列。谢谢。
解决方案
我不确定您是否需要转换为字符串:
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
除此之外,我认为没有更快/更短的方法。
推荐阅读
- php - 为什么 AJAX 在我的 PHP 应用程序中不起作用?
- c - C 程序输出复杂度
- javascript - Webpack / React:内联加载程序在不被调用的情况下执行(具有动态导入的内联加载程序的意外行为)
- angular - Angular ReactiveForm 将 Form.Value 合并到对象
- selenium - 使用 gherkin 和 specflow 的 BDD 迭代
- php - addnote.php 问题连接到android studio
- javascript - 在 Node.js 中的类中启动并返回一个类
- javascript - 如何删除 Material React Modal 中的蓝色边框?
- python - 从 .loc 查询返回字符串
- hbase - HBase Zookeeper AUTH_FAILED - 找不到任何 Kerberos tgt