添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

9 人关注

我想弄清楚,当你试图重置索引时,是否有办法重命名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()

结果留给你的是。

     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

You could do:

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'])

然而,这并不奏效,所以我在寻找另一种方法。 我意识到我总是可以在下一行重命名这些列,但我希望有一个更干净的方法在一行中完成它。

1 个评论
我认为这是不可能的,你看,你代码中的 reset_index() 实际上是 pandas.pydata.org/pandas-docs/stable/generated/... 所以你只有一列。 你可以做的是设置你的系列索引的列的名称,然后它们将保持作为DataFrame的列的名称。
python
pandas
rename
multiple-columns
slee
slee
发布于 2014-12-06
2 个回答
Psidom
Psidom
发布于 2021-01-22
已采纳
0 人赞同

替换代码0】不够聪明,无法做到这一点,但我们可以利用方法 rename_axis rename to give names to the index和columns/series before resetting the index; once the names are set up properly, reset_index 将自动把这些名字转换为结果中的列名。

这里的 rename_axis 给索引命名,有点相当于 df.index.names = ... ,只是在功能风格上; rename 给系列对象命名。

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