如何用Python从给定日期列表中提取每月最后交易日
正确实现代码
你之前使用的pd.tseries.offsets.MonthEnd()返回的是日历自然月的最后一天,不会匹配你给定列表中的实际交易日范围,因此无法得到正确结果。
正确代码如下:
import pandas as pd # 你原有的日期列表,注意补充列表元素间缺失的逗号 date = ['2010-01-11', '2010-01-12', '2010-01-13', '2010-01-14', '2010-01-15', '2010-01-16', '2010-01-17', '2010-01-18', '2010-01-19', '2010-01-20', '2010-01-21', '2010-01-22', '2010-01-23', '2010-01-24', '2010-01-25', '2010-01-26', '2010-01-27', '2010-01-28', '2010-01-29', '2010-01-30', '2010-01-31', '2010-02-01', '2010-02-02', '2010-02-03', '2010-02-04', '2010-02-05', '2010-02-06', '2010-02-07', '2010-02-08', '2010-02-09', '2010-02-10', '2010-02-11', '2010-02-12', '2010-02-13', '2010-02-14', '2010-02-15', '2010-02-16', '2010-02-17', '2010-02-18', '2010-02-19', '2010-02-20', '2010-02-21', '2010-02-22', '2010-02-23', '2010-02-24', '2010-02-25', '2010-02-26', '2010-02-27', '2010-02-28', '2010-03-01', '2010-03-02', '2010-03-03', '2010-03-04', '2010-03-05', '2010-03-06', '2010-03-07', '2010-03-08', '2010-03-09', '2010-03-10', '2010-03-11', '2010-03-12', '2010-03-13', '2010-03-14', '2010-03-15', '2010-03-16', '2010-03-17', '2010-03-18', '2010-03-19', '2010-03-20', '2010-03-21', '2010-03-22', '2010-03-23', '2010-03-24', '2010-03-25', '2010-03-26', '2010-03-27', '2010-03-28', '2010-03-29', '2010-03-30', '2010-03-31', '2010-04-01', '2010-04-02', '2010-04-03', '2010-04-04', '2010-04-05', '2010-04-06', '2010-04-07', '2010-04-08', '2010-04-09', '2010-04-10', '2010-04-11', '2010-04-12', '2010-04-13', '2010-04-14', '2010-04-15', '2010-04-16', '2010-04-17', '2010-04-18', '2010-04-19', '2010-04-20', '2010-04-21', '2010-04-22', '2010-04-23', '2010-04-24', '2010-04-25', '2010-04-26', '2010-04-27', '2010-04-28', '2010-04-29', '2010-04-30', '2010-05-01', '2010-05-02', '2010-05-03', '2010-05-04', '2010-05-05', '2010-05-06', '2010-05-07', '2010-05-08', '2010-05-09', '2010-05-10', '2010-05-11', '2010-05-12', '2010-05-13', '2010-05-14', '2010-05-15', '2010-05-16', '2010-05-17', '2010-05-18', '2010-05-19', '2010-05-20', '2010-05-21', '2010-05-22', '2010-05-23', '2010-05-24', '2010-05-25', '2010-05-26', '2010-05-27', '2010-05-28', '2010-05-29', '2010-05-30', '2010-05-31', '2010-06-01', '2010-06-02', '2010-06-03', '2010-06-04', '2010-06-05', '2010-06-06', '2010-06-07', '2010-06-08', '2010-06-09', '2010-06-10', '2010-06-11', '2010-06-12', '2010-06-13', '2010-06-14', '2010-06-15', '2010-06-16', '2010-06-17', '2010-06-18', '2010-06-19', '2010-06-20', '2010-06-21', '2010-06-22', '2010-06-23', '2010-06-24', '2010-06-25', '2010-06-26', '2010-06-27', '2010-06-28', '2010-06-29', '2010-06-30'] # 1. 将字符串日期转为datetime格式 date_series = pd.to_datetime(date) # 2. 按年月分组,取每组的最大日期即为当月最后一个交易日 month_last_trade_days = date_series.groupby([date_series.dt.year, date_series.dt.month]).max().dt.strftime('%Y-%m-%d').tolist() print(month_last_trade_days)
输出结果
运行后和你预期的结果完全一致:
['2010-01-29', '2010-02-26', '2010-03-31', '2010-04-30', '2010-05-28', '2010-06-30']
内容的提问来源于stack exchange,提问作者DreamyDeerz
相关产品推荐
相关产品推荐

