Python 我可以为重置索引指定名称吗?

Python 我可以为重置索引指定名称吗?,python,pandas,Python,Pandas,通常,当数据帧经历reset\u index()时,根据级别为新列分配名称index或level\u i 是否可以为新列指定一个名称?您可以调用reset\u index返回的df上的rename: In [145]: # create a df df = pd.DataFrame(np.random.randn(5,3)) df Out[145]: 0 1 2 0 -2.845811 -0.182439 -0.526785 1 -0.112

通常,当数据帧经历
reset\u index()
时,根据级别为新列分配名称
index
level\u i


是否可以为新列指定一个名称?

您可以调用
reset\u index
返回的df上的
rename

In [145]:
# create a df
df = pd.DataFrame(np.random.randn(5,3))
df

Out[145]:
          0         1         2
0 -2.845811 -0.182439 -0.526785
1 -0.112547  0.661461  0.558452
2  0.587060 -1.232262 -0.997973
3 -1.009378 -0.062442  0.125875
4 -1.129376  3.282447 -0.403731
In [149]:
df.rename_axis('bar').reset_index()

Out[149]:
   bar         0         1         2
0    0 -2.845811 -0.182439 -0.526785
1    1 -0.112547  0.661461  0.558452
2    2  0.587060 -1.232262 -0.997973
3    3 -1.009378 -0.062442  0.125875
4    4 -1.129376  3.282447 -0.403731
设置索引名

In [146]:    
df.index = df.index.set_names(['foo'])
df

Out[146]:
            0         1         2
foo                              
0   -2.845811 -0.182439 -0.526785
1   -0.112547  0.661461  0.558452
2    0.587060 -1.232262 -0.997973
3   -1.009378 -0.062442  0.125875
4   -1.129376  3.282447 -0.403731
调用
reset_index
并使用
rename
链接:

In [147]:
df.reset_index().rename(columns={df.index.name:'bar'})

Out[147]:
   bar         0         1         2
0    0 -2.845811 -0.182439 -0.526785
1    1 -0.112547  0.661461  0.558452
2    2  0.587060 -1.232262 -0.997973
3    3 -1.009378 -0.062442  0.125875
4    4 -1.129376  3.282447 -0.403731
感谢@ayhan

或者,您可以使用
rename_axis
reset_index
之前重命名索引:

In [145]:
# create a df
df = pd.DataFrame(np.random.randn(5,3))
df

Out[145]:
          0         1         2
0 -2.845811 -0.182439 -0.526785
1 -0.112547  0.661461  0.558452
2  0.587060 -1.232262 -0.997973
3 -1.009378 -0.062442  0.125875
4 -1.129376  3.282447 -0.403731
In [149]:
df.rename_axis('bar').reset_index()

Out[149]:
   bar         0         1         2
0    0 -2.845811 -0.182439 -0.526785
1    1 -0.112547  0.661461  0.558452
2    2  0.587060 -1.232262 -0.997973
3    3 -1.009378 -0.062442  0.125875
4    4 -1.129376  3.282447 -0.403731
或者先直接覆盖索引名:

df.index.name = 'bar'

然后调用
reset\u index

对于系列您可以直接指定名称。例如:

>>> df.groupby('s1').size().reset_index(name='new_name')
  s1  new_name
0  b         1
1  r         1
2  s         1
您可以这样做(2020年1月):


如果您使用reset_index()从一个系列转到一个数据帧,您可以这样命名列

my_series.rename('Example').reset_index()

“Alternative you can”之后的部分对我很有效,之前的方法似乎不起作用(它不会重命名旧列,将其保留为“index”)。效果非常好!