使用索引和名称列重命名索引

时间:2017-08-08 15:06:06

标签: python pandas indexing

我有数据框df

import pandas as pd
b=np.array([0,1,2,2,0,1,2,2,3,4,4,4,5,6,0,1,0,0]).reshape(-1,1)
c=np.array(['a','a','a','a','b','b','b','b','b','b','b','b','b','b','c','c','d','e']).reshape(-1,1)
df = pd.DataFrame(np.hstack([b,c]),columns=['Start','File'])


df
Out[22]: 
   Start File
0      0    a
1      1    a
2      2    a
3      2    a
4      0    b
5      1    b
6      2    b
7      2    b
8      3    b
9      4    b
10     4    b
11     4    b
12     5    b
13     6    b
14     0    c
15     1    c
16     0    d
17     0    e

我想使用index_File重命名索引 为了使0_a,1_a,... 17_e为indeces

2 个答案:

答案 0 :(得分:4)

您可以在set_index

的情况下使用inplace=True
df.set_index(df.File.radd(df.index.astype(str) + '_'))

     Start File
File           
0_a      0    a
1_a      1    a
2_a      2    a
3_a      2    a
4_b      0    b
5_b      1    b
6_b      2    b
7_b      2    b
8_b      3    b
9_b      4    b
10_b     4    b
11_b     4    b
12_b     5    b
13_b     6    b
14_c     0    c
15_c     1    c
16_d     0    d
17_e     0    e

以更多代码字符为代价,我们可以加快这一点,并处理不必要的索引名称

df.set_index(df.File.values.__radd__(df.index.astype(str) + '_'))

     Start File
0_a      0    a
1_a      1    a
2_a      2    a
3_a      2    a
4_b      0    b
5_b      1    b
6_b      2    b
7_b      2    b
8_b      3    b
9_b      4    b
10_b     4    b
11_b     4    b
12_b     5    b
13_b     6    b
14_c     0    c
15_c     1    c
16_d     0    d
17_e     0    e

答案 1 :(得分:3)

您可以直接分配到索引,首先使用astype将默认索引转换为str,然后照常连接str:

In[41]:
df.index = df.index.astype(str) + '_' + df['File']
df

Out[41]: 
     Start File
File           
0_a      0    a
1_a      1    a
2_a      2    a
3_a      2    a
4_b      0    b
5_b      1    b
6_b      2    b
7_b      2    b
8_b      3    b
9_b      4    b
10_b     4    b
11_b     4    b
12_b     5    b
13_b     6    b
14_c     0    c
15_c     1    c
16_d     0    d
17_e     0    e