在多索引中创建新列
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
如果想让多个列一起工作,例如减去 B
与 A
可以使用新的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
以上是关于在多索引中创建新列的主要内容,如果未能解决你的问题,请参考以下文章