Python 基于其他列的值在多索引dataframe中创建新列的简单方法

Python 基于其他列的值在多索引dataframe中创建新列的简单方法,python,pandas,dataframe,Python,Pandas,Dataframe,我有多索引数据帧: df=pd.DataFrame(np.zeros((2,4))) df.columns=pd.MultiIndex.from_arrays([['a','a','b','b'],[1,2,1,2]]) df['a']=10 df['b']=20 a b 1 2 1 2 0 10 10 20 20 1 10 10 20 20 我想创建一个新的高层列,它是“a”和“b”的总和,即 通缉结果: a b

我有多索引数据帧:

df=pd.DataFrame(np.zeros((2,4)))
df.columns=pd.MultiIndex.from_arrays([['a','a','b','b'],[1,2,1,2]])
df['a']=10
df['b']=20

   a       b   
   1  2    1  2
0  10  10  20  20
1  10  10  20  20
我想创建一个新的高层列,它是“a”和“b”的总和,即

通缉结果:

   a       b      c   
   1  2    1  2   1  2  
0  10  10  20  20 30 30
1  10  10  20  20 30 30
理想情况下,我想写一些类似于

df['c']=df['a']+df['b'] 

但是它在多索引数据帧中不起作用

我假设在添加列值时,您的意思是“b”而不是“c”。 检查问题,它可能会有所帮助。

最简单的是使用和:

另一个解决方案包括和:


第一个解决方案非常简单。是的,可能会慢一点,因为要重塑形状@耶兹雷尔:祝贺你进入精英100K俱乐部;-)
df = df.stack()
df['c']=df['a']+df['b'] 
df = df.unstack()
print (df)
    a       b       c    
    1   2   1   2   1   2
0  10  10  20  20  30  30
1  10  10  20  20  30  30
df1 = df.a.add(df.b)
#create MultiIndex with c level
df1.columns = [['c'] * len(df1.columns), df1.columns]
print (df1)
    c    
    1   2
0  30  30
1  30  30

df2 = pd.concat([df, df1], axis=1)
print (df2)
    a       b       c    
    1   2   1   2   1   2
0  10  10  20  20  30  30
1  10  10  20  20  30  30