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

如何在Pandas MultiIndex中获取多个Time列索引并插入列?

嘿,这个问题我之前处理多级表头表格时也踩过坑!直接用df.columns.get_loc('Time')肯定不行,因为MultiIndex的列是元组形式的(比如('Stage 1', 'Time')),单拿'Time'去匹配找不到对应的索引。咱们一步步来解决:

第一步:获取所有「Time」列的索引/位置

首先,我们要先定位到所有二级表头是'Time'的列。可以用列表推导式遍历所有列,筛选出符合条件的:

import pandas as pd

# 读取带两级表头的表格
df = pd.read_excel('myspreadsheet.xlsx', header=[0,1])

# 获取所有二级表头为'Time'的列的MultiIndex标签(比如[('Stage 1', 'Time'), ('Stage 2', 'Time'), ...])
time_col_labels = [col for col in df.columns if col[1] == 'Time']

# 如果需要列的位置索引(比如[1,4,7]这种格式),可以再转一步:
time_col_positions = [df.columns.get_loc(col) for col in time_col_labels]

这样你就得到了两种格式的结果,完全不用硬编码「Stage #」,适配任意数量的Stage。

第二步:在每个「Time」列后插入新的10列

这里有个小坑:如果从前往后插入列,后面的列位置会因为前面插入而偏移,所以最好从后往前处理,或者用拆分拼接的方式更稳妥。

方法1:从后往前插入(适合小批量列)

假设你要插入的DataFrame叫new_df(包含10列数据),代码如下:

# 假设new_df是你要插入的10列,这里用示例数据代替(实际替换成你的真实数据)
new_df = pd.DataFrame({f'Insert_Col_{i}': [1]*len(df) for i in range(10)})

# 从最后一个Time列的位置开始往前插,避免位置偏移
for pos in reversed(time_col_positions):
    # 逐个插入new_df的列,每插一列,位置+1(因为列数增加了)
    for insert_col in new_df.columns:
        df.insert(pos + 1, insert_col, new_df[insert_col])
        pos += 1

方法2:拆分拼接(更高效,适合大量列)

如果new_df列数很多,拆分拼接的方式更清晰,也不会有位置偏移问题:

parts = []
current_start = 0

for pos in time_col_positions:
    # 把当前到Time列的部分切出来
    parts.append(df.iloc[:, current_start:pos+1])
    # 插入new_df的所有列
    parts.append(new_df)
    # 更新起始位置为Time列的下一列
    current_start = pos + 1

# 加上表格最后剩下的部分
parts.append(df.iloc[:, current_start:])

# 拼接所有部分得到最终表格
df_final = pd.concat(parts, axis=1)

验证结果

你可以用print(df_final.columns)查看新的列结构,确认每个'Time'列后面都跟上了插入的10列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:57:58