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

如何保留pandas DataFrame中每年度、月度首次出现日期对应的行

解决方案

核心思路是使用Pandas向量化操作实现需求,完全避免循环,性能远高于自定义循环实现,以下是两种常用实现方案:

方案1:基于分组最小日期筛选(无需提前排序,结果保留原始行顺序)

import pandas as pd

# 示例数据构造,你已经转了date为datetime可跳过这步
df = pd.DataFrame([['2016-02-05', 22], ['2016-02-15', 15], ['2016-05-03', 18], ['2016-05-20', 9], ['2017-03-02', 10], ['2018-04-01', 11], ['2018-04-02', 12]],
             columns=['date', 'qty'])
df['date'] = pd.to_datetime(df['date'])

# 核心操作:按年月分组取每组最小日期,筛选对应行
min_date_mask = df['date'] == df.groupby([df['date'].dt.year, df['date'].dt.month])['date'].transform('min')
result = df[min_date_mask]

输出结果和期望完全一致:

date  qty
0 2016-02-05   22
2 2016-05-03   18
4 2017-03-02   10
5 2018-04-01   11

方案2:基于周期去重(代码更简洁,适合已按日期升序排序的数据集)

如果你的数据集已经提前按date列升序排序,直接用下面一行代码即可实现:

result = df[~df['date'].dt.to_period('M').duplicated(keep='first')]

说明:dt.to_period('M')会将日期转换为YYYY-MM格式的年月周期,duplicated(keep='first')会标记重复的周期,取反后就只保留每个周期第一次出现的行,也就是对应月份最早的日期行。


内容的提问来源于stack exchange,提问作者zyzzler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:07