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

如何在多层索引DataFrame中添加0级列并保留格式

为多层索引DataFrame添加0级列并填充数据

原始DataFrame

以下是你提供的原始多层索引DataFrame代码:

import pandas as pd

data = [[99,3,12,4,63,55]]
cols = pd.MultiIndex.from_product([['1. FY21','2. FY22','3. FY23'],['Values','Sites']])
df = pd.DataFrame(data, columns = cols)

# 注:此处set_levels操作可省略,from_product已生成对应层级
# df.columns.set_levels(['1. FY21','2. FY22','3. FY23'],level=0,inplace=True)
# df.columns.set_levels(['Values', 'Sites'], level=1, inplace=True)

目标1:添加空列

直接在原DataFrame上为新0级列添加两个1级子列并赋值,无需重构整个数据集,适合大型DataFrame:

# 定义新的0级列名称
new_col_level0 = '4. New Column'

# 为两个1级子列赋值"blank"
df[(new_col_level0, 'Values')] = "blank"
df[(new_col_level0, 'Sites')] = "blank"

# 可选:重新排列列顺序,匹配期望输出结构
df = df.reindex(columns=pd.MultiIndex.from_product(
    [['1. FY21','2. FY22','3. FY23', new_col_level0], ['Values','Sites']]
))

执行后即可得到带空列的目标DataFrame。


目标2:通过计算填充新列

基于已有列的运算结果填充新列,直接在原DataFrame上操作更高效:

new_col_level0 = '4. New Column'

# 计算Values列:FY21 Values - FY22 Values
df[(new_col_level0, 'Values')] = df[('1. FY21', 'Values')] - df[('2. FY22', 'Values')]
# 计算Sites列:FY21 Sites - FY22 Sites
df[(new_col_level0, 'Sites')] = df[('1. FY21', 'Sites')] - df[('2. FY22', 'Sites')]

# 可选:重新排列列顺序
df = df.reindex(columns=pd.MultiIndex.from_product(
    [['1. FY21','2. FY22','3. FY23', new_col_level0], ['Values','Sites']]
))

执行后新列的Values值为99-12=87,Sites值为3-4=-1,与期望输出一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:34:57