在多索引中创建新列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在多索引中创建新列相关的知识,希望对你有一定的参考价值。

我有一个简单的数据框架。

     A       B
     1   2   1   2
Foo  100 200 300 400
Bar  100 200 300 400

我想添加一个新的列,就是(B,2) - (A,2)

我试过的是:df["Chg", "Period"]=[df.loc[:,[("B",2)]] 。- df.loc[:, [("A", 2)]]]

但我被告知,。

值的长度与索引的长度不一致

我有点困惑--我以为通过为我的新列设置两个列头就可以了,但我现在很苦恼。任何帮助将是非常感激

谢谢你

答案

使用元组进行选择 MultiIndex 和新的MultiIndex列。

df[("Chg","Period")]  = df[("B",2)] - df[("A", 2)]

print (df)
       A         B         Chg
       1    2    1    2 Period
Foo  100  200  300  400    200
Bar  100  200  300  400    200

如果想让多个列一起工作,例如减去 BA 可以使用新的MultiIndex级别 DataFrame.xs,然后通过以下方式创建MultiIndex MultiIndex.from_product 补足 DataFrame.join:

df1 = df.xs('B', axis=1, level=0) - df.xs('A', axis=1, level=0)
df1.columns = pd.MultiIndex.from_product([['Diff'], df1.columns])
print (df1)
    Diff     
       1    2
Foo  200  200
Bar  200  200

df = df.join(df1)
print (df)
       A         B      Diff     
       1    2    1    2    1    2
Foo  100  200  300  400  200  200
Bar  100  200  300  400  200  200

以上是关于在多索引中创建新列的主要内容,如果未能解决你的问题,请参考以下文章

如果存在多索引,熊猫将不允许选择列?

如何在 Pandas 中创建多索引

Pandas 将列多索引转换为行多索引

Python Multiindex - 如何在只有时间作为索引的数据框中创建分层多索引?

在缺少日期的多索引数据框中移动列

熊猫添加更高级别的列多索引