更改一些但不是全部的pandas multiindex列名

时间:2016-07-28 00:04:07

标签: python pandas

假设我的数据框的多索引列名称如下所示:

     A                 B
     '1.5' '2.3' '8.4' b1
r1   1     2     3     a
r2   4     5     6     b
r3   7     8     9     10

如何更改' A'下的列名称?从字符串到浮点数,而不修改'',以获得以下内容?

     A                 B
     1.5   2.3   8.4   b1
r1   1     2     3     a
r2   4     5     6     b
r3   7     8     9     10

在实际使用案例中,在' A'将有数千个名称应该是浮点数的列(它们代表光谱仪的波长),数据框中的数据代表多个不同的观察结果。

谢谢!

1 个答案:

答案 0 :(得分:1)

# build the DataFrame (sideways at first, then transposed)
arrays = [['A','A','A','B'],['1.5', '2.3', '8.4', 'b1']]
tuples = list( zip(*arrays) )

data1 = np.array([[1,2,3,'a'], [4,5,6,'b'], [7,8,9,10]])
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(data1.T, index=index).T

打印df.columns提供现有的列名称。

Out[84]: 
MultiIndex(levels=[[u'A', u'B'], [u'1.5', u'2.3', u'8.4', u'b1']],
       labels=[[0, 0, 0, 1], [0, 1, 2, 3]],
       names=[u'first', u'second'])

现在更改列名

# make new column titles (probably more pythonic ways to do this)
A_cols = [float(i) for i in df['A'].columns]
B_cols = [i for i in df['B'].columns]    
cols = A_cols + B_cols

# set levels
levels = [df.columns.levels[0],cols]
df.columns.set_levels(levels,inplace=True)

提供以下输出

Out[86]: 
MultiIndex(levels=[[u'A', u'B'], [1.5, 2.3, 8.4, u'b1']],
       labels=[[0, 0, 0, 1], [0, 1, 2, 3]],
       names=[u'first', u'second'])