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

Python Pandas筛选澳股每月第15交易日代码失效问题求助

问题说明

Sheet1包含澳大利亚股市10年交易日数据,需求是保留每月第15个交易日(不一定是当月15号),但现有代码仅能筛选出前12个月的数据,后续年份无法正常过滤。

原代码

df = pd.read_csv(r'C:\Users\\Desktop\Sheet1.csv')
df['Date'] = pd.to_datetime(df['Date'])
df['month'] = df['Date'].dt.month
df['trading_day'] = df.groupby(['month']).cumcount() + 1
df = df[df['trading_day'] == 15]
df.drop(['month', 'trading_day'], axis=1, inplace=True)
df.to_excel("Sheet2.xlsx", index=False)

当前输出

Date                 NAV
2009-06-22 00:00:00 $50.7731
2009-07-21 00:00:00 $52.2194
2009-08-21 00:00:00 $55.5233
2009-09-21 00:00:00 $61.1116
2009-10-21 00:00:00 $62.6512
2009-11-20 00:00:00 $60.9736
2009-12-21 00:00:00 $60.2841
2010-01-22 00:00:00 $61.2418
2010-02-19 00:00:00 $59.8768
2010-03-19 00:00:00 $63.4521
2010-04-23 00:00:00 $63.1672
2010-05-21 00:00:00 $55.8651

问题根源

原代码仅按month(月份)分组计算交易日序号,导致不同年份的同一月份会被合并计数。比如2009年1月和2010年1月的交易日会被放在同一组累计,后续年份的第15个交易日永远无法被筛选到,因为累计计数早已超过15。

修正方案

需要按年份+月份组合分组,确保每个年月的交易日序号独立计数:

import pandas as pd

df = pd.read_csv(r'C:\Users\\Desktop\Sheet1.csv')
df['Date'] = pd.to_datetime(df['Date'])
# 按年份和月份组合分组,计算每月内的交易日序号
df['trading_day'] = df.groupby([df['Date'].dt.year, df['Date'].dt.month]).cumcount() + 1
# 筛选每月第15个交易日
df = df[df['trading_day'] == 15]
df.drop(['trading_day'], axis=1, inplace=True)
df.to_excel("Sheet2.xlsx", index=False)

说明

  • 分组键改用dt.year和dt.month的组合,保证每个自然月的交易日计数从1开始重新累加
  • 移除了多余的month列,直接通过日期属性分组更简洁
  • 该代码可处理所有年份的月度第15交易日筛选,覆盖10年数据需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:25:23