如何用pandas原生方法筛选DataFrame中季度实际结束日对应的行
Pandas提取季度标准结束日期对应行的实现方案
必须先将date列转换为datetime类型,否则无法使用dt属性做日期判断
完整实现代码
步骤1:构造示例数据&预处理
import pandas as pd # 构造示例数据 data = { 'player': ['dan', 'dmitri', 'darren', 'xae12', 'except'], 'amount': [10, 45, 15, 40, 89], 'date': ['2021-06-29', '2021-06-30', '2021-12-31', '2021-12-30', '2022-01-31'], 'Quarter': ['2Q21', '2Q21', '4Q21', '4Q21', '1Q22'] } df = pd.DataFrame(data) # 转换date列为datetime类型(必做步骤) df['date'] = pd.to_datetime(df['date'])
方法1:标准公历季度场景(代码最简)
直接调用pandas内置的季度末判断属性,适配绝大多数常规场景:
result = df[df['date'].dt.is_quarter_end]
方法2:自定义季度划分场景(扩展性强)
如果你的Quarter列对应企业自定义财季(比如财年从4月开始),可使用分组校验的方案:
# 计算每个Quarter分组内的最大日期 quarter_max_date = df.groupby('Quarter')['date'].max().reset_index(name='max_date') # 筛选最大日期为标准季度末的有效Quarter valid_quarters = quarter_max_date[quarter_max_date['max_date'].dt.is_quarter_end]['Quarter'] # 关联原表取对应行 result = df.merge(quarter_max_date, on='Quarter', how='inner')\ .query('Quarter in @valid_quarters and date == max_date')\ .drop(columns='max_date')
输出结果验证
两种方法得到的结果完全符合需求:
player amount date Quarter 1 dmitri 45 2021-06-30 2Q21 2 darren 15 2021-12-31 4Q21
内容的提问来源于stack exchange,提问作者Paras Gupta
相关产品推荐
相关产品推荐

