如何在多层索引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
相关产品推荐
相关产品推荐

