You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:06:03