如何将Pandas日频DataFrame重采样至序列实际月末而非日历月末?
解决Pandas重采样保留实际月末日期的问题
当你需要将日频股票数据重采样为月频,且保留每个月数据中实际最后一个交易日的日期(而非日历月末),可以用以下两种简洁方法:
方法1:使用groupby + pd.Grouper直接取每组最后一行
这种方法最直接,分组后直接获取每组的最后一行,索引会自动保留原始数据中的实际最后日期:
import pandas as pd # 假设df是你的日频股票数据DataFrame,索引为日期类型 result = df.sort_index().groupby(pd.Grouper(freq='M')).last()
pd.Grouper(freq='M')按自然月分组,确保同一月份的数据被归为一组.last()直接提取每组的最后一行,保留原始的日期索引和对应价格
方法2:修正resample后的索引
如果你更习惯用resample,可以先获取重采样后的数据,再替换索引为实际最后日期:
# 先通过resample获取月度数据(此时索引是日历月末) resampled_data = df.sort_index().resample('M').last() # 提取每个月的实际最后日期 actual_end_dates = df.sort_index().groupby(df.index.to_period('M')).apply(lambda x: x.index[-1]) # 替换索引 resampled_data.index = actual_end_dates
两种方法都能实现你的需求:既得到每个月最后一个交易日的价格,又保留对应的实际日期,而非默认的日历月末(比如2022-07-31)。
内容的提问来源于stack exchange,提问作者youmac
相关产品推荐
相关产品推荐

