如何在set_index()之后删除额外的行而不丢失索引名称?

时间:2017-10-17 19:15:55

标签: python pandas

我想使用df.set_index()函数更改我的DataFrame索引列。虽然这提供了一种功能性解决方案,但它创造了一个额外的"我想摆脱的一排。

df = pd.DataFrame({'A': ['a','b','c'], 'B': ['d','e','f'], 'C': [1,2,3]})

df看起来像这样:

   A  B  C
0  a  d  1
1  b  e  2
2  c  f  3

更改DataFrame索引:

df.set_index('C')

结果:

   A  B
C
1  a  e
2  b  f
3  c  g

如何使数据框看起来如下?

C  A  B
1  a  e
2  b  f
3  c  g

我看到了类似的问题here,但使用reset_index()的解决方案未能提供所需的结果。我想保留我在列C上的值,只删除额外的行。

3 个答案:

答案 0 :(得分:5)

如果您想将C列设为索引

In [50]: r = df.set_index('C')

In [51]: r
Out[51]:
   A  B
C
1  a  d
2  b  e
3  c  f

In [52]: r.index.name
Out[52]: 'C'

In [53]: r.columns.name is None
Out[53]: True

In [54]: r = r.rename_axis(None,0).rename_axis('C',1)

In [57]: r
Out[57]:
C  A  B
1  a  d
2  b  e
3  c  f

In [55]: r.index.name is None
Out[55]: True

In [56]: r.columns.name
Out[56]: 'C'

注意:但它看起来很容易误导......

答案 1 :(得分:3)

使用[[]]

尝试此操作
df[['C','A','B']]

示例:

df = pd.DataFrame({'A': ['a','b','c'], 'B': ['d','e','f'], 'C': [1,2,3]})
print(df)

   A  B  C
0  a  d  1
1  b  e  2
2  c  f  3

df = df[['C','A','B']]
print(df)

   C  A  B
0  1  a  d
1  2  b  e
2  3  c  f

答案 2 :(得分:1)

如果你只想要DataFrame显示(打印)你想要的......

print (df[['C','A','B']].to_string(index=False))
C  A  B
1  a  d
2  b  e
3  c  f