You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中替换时间序列DataFrame的多层索引时间值?

替换MultiIndex中的Time层级索引值

嘿,我看你需要把MultiIndex里的Time层级从6:00-8:00的15分钟区间,替换成0:00-2:00的对应区间,而且每个日期下的数据顺序要完全对应上对吧?这里有几个简单高效的方法,你可以按需选择:

方法1:分组替换Time值

如果你的数据每个日期下的Time数量固定(都是9条),可以先构造好目标时间序列,再按Date分组替换每个组的Time索引:

import pandas as pd

# 先模拟你的原始数据(如果已有数据可以跳过这部分)
data = {
    'a': [20.31,20.76,21.4,21.84,22.17,22.38,22.75,22.93,23.13]*2,
    'b': [0,26738,22462,20033,20010,18133,18254,17039,15934]*2,
    'c': [-2.95,-2.88,-2.77,-3,-3.28,-2.82,-3.14,-3.22,-3.27]*2
}
index = pd.MultiIndex.from_product([
    pd.date_range('2018-01-09', '2018-01-10'),
    pd.date_range('6:00', '8:00', freq='15T').time
], names=['Date', 'Time'])
df = pd.DataFrame(data, index=index)

# 构造目标Time序列:00:00到02:00的15分钟间隔
target_times = pd.date_range('0:00', '2:00', freq='15T').time

# 按Date分组,给每个组替换Time索引
df = df.groupby(level='Date').apply(lambda x: x.set_axis(target_times, level='Time'))
# 重置一下层级顺序,保持和原数据一致
df = df.reorder_levels(['Date', 'Time'])

方法2:时间偏移法(更高效)

观察一下,原始Time和目标Time刚好相差6小时,所以我们可以直接把Time转成datetime类型,减去6小时后再提取时间部分,这个方法不需要分组,大数据量下更快:

# 把Time层级转成datetime,减去6小时,再转回time类型
new_time = pd.to_datetime(df.index.get_level_values('Time'), format='%H:%M:%S') - pd.Timedelta(hours=6)
new_time = new_time.time

# 重新构造MultiIndex替换原索引
new_index = pd.MultiIndex.from_arrays(
    [df.index.get_level_values('Date'), new_time],
    names=['Date', 'Time']
)
df.index = new_index

方法3:直接重建MultiIndex

如果每个日期对应的Time数量和顺序完全固定,也可以直接生成目标的MultiIndex,然后替换原索引,这种方法最直接:

# 获取所有唯一的日期
unique_dates = df.index.get_level_values('Date').unique()
# 生成目标Time序列
target_times = pd.date_range('0:00', '2:00', freq='15T').time
# 重新构造MultiIndex
new_index = pd.MultiIndex.from_product([unique_dates, target_times], names=['Date', 'Time'])
# 替换原索引(因为数据顺序完全匹配,直接替换即可)
df.index = new_index

这三种方法都能得到你想要的结果,你可以根据自己的数据集大小和使用习惯来选~


内容的提问来源于stack exchange,提问作者jerry han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:24:43