如何在多索引数据框中添加0级列并保持格式

问题描述 投票:0回答:1

我有一个包含许多行和列的大型多索引数据框。我想在第一级数据框中添加一列,同时保留第二级结构。我的第一个目标是了解如何向该数据框添加新的空白列。我的第二个目标是了解如何使用计算填充新列,在本例中是第一列字段和第二列字段之间的简单减法。

原始数据框:

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)

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 - 仅添加一个空的新列

data_new = [[99,3,12,4,63,55,"blank","blank"]]

cols_new = pd.MultiIndex.from_product([['1. FY21','2. FY22','3. FY23','4. New Column'],['Values','Sites']])

df_new = pd.DataFrame(data_new, columns = cols_new)

所需输出 #2 - 在新列中进行计算

data_newer = [[99,3,12,4,63,55,87,-1]]

cols_new = pd.MultiIndex.from_product([['1. FY21','2. FY22','3. FY23','4. New Column'],['Values','Sites']])

df_newer = pd.DataFrame(data_newer, columns = cols_new)

python pandas dataframe multi-index calculated-columns
1个回答
0
投票

您可以从级别 1 和

join
获取到原始 DataFrame 的唯一值,以创建具有相同结构的新列。然后使用
at
来赋值:

df = df.join(pd.DataFrame(columns=pd.MultiIndex.from_product([["4. New Column"], df.columns.get_level_values(1).unique()])))
df.at[0, ("4. New Column","Values")] = 87
df.at[0, ("4. New Column","Sites")] = -1

>>> df
  1. FY21        2. FY22        3. FY23        4. New Column       
    Sites Values   Sites Values   Sites Values         Sites Values
0      99      3      12      4      63     55            -1     87
© www.soinside.com 2019 - 2024. All rights reserved.