基于其他列的值在multiindex数据框中创建新列的简便方法

时间:2017-03-15 10:54:33

标签: 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      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'] 

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

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用stackunstack

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

addconcat的另一种解决方案:

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

答案 1 :(得分:0)

我会假设你的意思是' b'而不是' c'添加列值时。 检查this可能会有帮助的问题。