通常,当数据框经历reset_index()
时,新列会根据级别分配名称index
或level_i
。
是否可以为新列指定名称?
答案 0 :(得分:16)
您可以通过rename
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 [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 [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_index
答案 1 :(得分:16)
您可以这样做(2020年1月):
df = df.reset_index().rename(columns={'index': 'bar'})
print(df)
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
答案 2 :(得分:1)
对于系列,您可以直接指定名称。例如:
>>> df.groupby('s1').size().reset_index(name='new_name')
s1 new_name
0 b 1
1 r 1
2 s 1
答案 3 :(得分:1)
如果您使用reset_index()从Series转到DataFrame,则可以将列命名为
my_series.rename('Example').reset_index()