如何在pandas中设置多日期列多重索引并实现时间重采样
问题原因
你原有代码报错且不符合需求的核心原因有两点:
- pandas的
resample方法作用于多重索引时,默认无法识别要对哪个时间维度做重采样,需要显式指定level参数; - 即使指定了
level重采样其中一个时间索引,另一个时间索引也不会自动同步偏移,和你预期的两个时间列同步间隔30分钟的逻辑不匹配。
解决方案
从你给出的预期输出可以看到,Datetime2和Datetime1固定相差1小时,直接按如下逻辑处理即可:
import pandas as pd # 第一步:先将两列日期转换为pandas datetime类型,避免类型不兼容报错 df["Datetime1"] = pd.to_datetime(df["Datetime1"]) df["Datetime2"] = pd.to_datetime(df["Datetime2"]) # 第二步:将Datetime1设为单索引做30分钟重采样,前向填充Value值 df_resampled = df.set_index("Datetime1")["Value"].resample("30T").ffill().reset_index() # 第三步:按固定1小时差计算Datetime2即可 df_resampled["Datetime2"] = df_resampled["Datetime1"] + pd.Timedelta(hours=1) # 如果后续需要使用多重索引,执行如下代码即可 df_resampled = df_resampled.set_index(["Datetime1", "Datetime2"])
执行后输出的结构完全匹配你给出的预期结果。
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

