Python Pandas:仅含时间索引的DataFrame如何创建带日分段的分层多级索引
实现思路
核心逻辑是识别时间索引跨过午夜的分界点,累加分段计数后生成对应Day标签,最终替换为多级索引即可,具体实现代码如下:
import pandas as pd # 1. 先将当前时间索引转换为Timedelta类型,方便做差值比较 # 如果你的索引已经是Timedelta类型可跳过这一步 df.index = pd.to_timedelta(df.index) # 2. 计算跨午夜的分段计数:相邻时间差值为负即说明跨过0点,累加计数 day_count = (df.index.to_series().diff() < pd.Timedelta(0)).cumsum() # 3. 生成D/D+1格式的标签 day_label = day_count.map(lambda x: f'D+{x}' if x != 0 else 'D') # 4. 构造多层索引并替换原索引 df.index = pd.MultiIndex.from_arrays( [day_label, df.index], names=['Day', 'Datetime'] )
调整说明
执行后可直接打印df查看层级结构,跨0点的部分会自动被划分到下一个D+N的分段中,完全符合你给出的示例效果。如果需要调整标签命名格式,只需修改第三步lambda函数的返回值即可。
内容的提问来源于stack exchange,提问作者andyc
相关产品推荐
相关产品推荐

