我试图弄清楚当你尝试重置索引时是否有办法重命名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'])
然而,这没有用,所以寻找另一种方式。我意识到我总是可以在下一行重命名列,但希望能够在一行中更清晰地进行操作。
谢谢! 萨姆
答案 0 :(得分:5)
reset_index
不够聪明,但我们可以利用方法rename_axis
和rename
在重置索引之前为索引和列/系列赋予名称;一旦名称设置正确, 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)