Pandas日频OHLCV重采样为周频时自定义聚合逻辑未生效如何解决
问题原因
你调用BTC.resample('W').apply(logic)后没有将返回的聚合结果赋值给变量,原始BTC对象还是未做聚合的日度数据,后续直接修改BTC的索引自然只会偏移原日度数据的日期,不会触发聚合逻辑。另外针对列维度的不同聚合规则,使用agg()方法比apply()更高效规范。
正确实现代码
首先先保证BTC的索引是datetime类型且按时间升序排列,再执行以下逻辑:
import pandas as pd from pandas.tseries.frequencies import to_offset # 聚合规则定义 logic = { 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum' } # 周频重采样+聚合,接收返回的结果 BTC_weekly = BTC.resample('W').agg(logic) # 将周标签从默认的周日日期偏移6天,改为当周周一的日期 BTC_weekly.index -= to_offset("6D") # 输出验证 BTC_weekly.head()
补充说明
- pandas中
resample('W')默认以周日作为周结束节点,刚好匹配你的需求:聚合时first会自动取周内第一个交易日(周一)的开盘价,last取周内最后一个交易日(周日)的收盘价,max/min/sum分别对应周内的最高、最低、成交量总和。 - 如果你的原始数据存在非交易日空缺,没有周一的交易数据,
first会自动取周内首个存在的交易日的开盘价,符合实际交易数据的处理逻辑。
内容的提问来源于stack exchange,提问作者user14009897
相关产品推荐
相关产品推荐

