如何使用Pandas重命名重置索引上的多个列

时间:2014-12-05 20:24:43

标签: python pandas rename multiple-columns

我试图弄清楚当你尝试重置索引时是否有办法重命名Pandas列。我在文档中看到你可以使用" name"如果只有一列,则设置重置索引的列名的参数,但我很好奇是否有办法为多列执行此操作。

例如:

df1 = pd.DataFrame({
'A' : ['a1', 'a1', 'a2', 'a3'],
'B' : ['b1', 'b2', 'b3', 'b4'],
'D1' : [1,0,0,0],
'D2' : [0,1,1,0],
'D3' : [0,0,1,1],
})

df1.set_index(['B','A']).stack().reset_index()

结果让你:

Out[82]: 
     B   A level_2  0
0   b1  a1      D1  1
1   b1  a1      D2  0
2   b1  a1      D3  0
3   b2  a1      D1  0
4   b2  a1      D2  1

你可以这样做:

df1.set_index(['B','A']).stack().reset_index(name='my_col')

为了设置最后一列的名称,我想知道是否有办法使用该参数设置' level_2'的名称。专栏。

我想到的第一件事就是尝试:

df1.set_index(['B','A']).stack().reset_index(name=['my_col2','my_col'])

然而,这没有用,所以寻找另一种方式。我意识到我总是可以在下一行重命名列,但希望能够在一行中更清晰地进行操作。

谢谢! 萨姆

2 个答案:

答案 0 :(得分:5)

reset_index不够聪明,但我们可以利用方法rename_axisrename在重置索引之前为索引和列/系列赋予名称;一旦名称设置正确, reset_index 将自动将这些名称转换为结果中的列名:

此处rename_axis为索引提供名称,除了功能样式外,它与df.index.names = ...有些相同; rename为Series对象命名:

df1.set_index(['B','A']).stack().rename_axis(['B','A','col2']).rename('col').reset_index()

#    B   A  col2    col
#0  b1  a1    D1    1
#1  b1  a1    D2    0
#2  b1  a1    D3    0
#3  b2  a1    D1    0
#4  b2  a1    D2    1
# ..

答案 1 :(得分:0)

我相信有很多选择,但是如果您只有几列,set_axis() 函数可以完成这项工作。

df1.set_index(['B','A']).stack().reset_index().set_axis(['my_col2','my_col'], axis=1)