如何用Pythonic方式提取pandas数据中每月实际最后一天的记录?
保留Pandas数据中实际存在的每月最后一天记录
我太懂你这个痛点了——用df.resample('M').last()虽然能拿到当月最后一条数据,但硬把索引改成日历月末,完全忽略了数据里实际存在的最后日期,实在闹心。
给你个非常Pythonic的解决方案,一行代码就能搞定:
result = df.loc[df.groupby(df.index.to_period('M')).idxmax()]
为啥这个方法管用?
- 第一步
df.index.to_period('M')把你的日期索引转换成月份周期(比如2010-01),用来按月份分组。 - 然后
groupby(...).idxmax()会找出每个月分组里索引最大的日期——也就是你数据里实际存在的当月最后一天的记录日期。 - 最后用
df.loc[...]根据这些日期筛选出对应的行,完美保留原数据里的实际日期索引和对应的值,完全不会像resample那样强制替换成日历月末。
额外提示
如果你的索引还不是datetime类型,记得先转一下:
df.index = pd.to_datetime(df.index)
比如你的示例数据里1月最后一条记录是2010-01-29 0.001248,用这个方法得到的结果里,索引就是2010-01-29,而不是被改成2010-01-31,完全符合你的需求。
内容的提问来源于stack exchange,提问作者MTANG
相关产品推荐
相关产品推荐

