2015-02-11 87 views
1

末我有DF它看起來像:熊貓數據框中:追加的名字給指數以DF

df_table 
Name  exp1 
bnb_q8a12 41 
bnb_q8a8  36 
bnb_q8a2  30 
_xexp0  20 
_xexp73  16 
bnb_q8a7  10 
_xexp216  10 
bnb_q8a3  10 

我想使用df這個樣子,與被命名爲「網所有指數:_xexp。 。「附加在df的末尾。

df_table 
Name  exp1 
bnb_q8a12   41 
bnb_q8a8   36 
bnb_q8a2   30 
bnb_q8a7   10 
bnb_q8a3   10 
Net: _xexp0  20 
Net: _xexp73  16 
Net: _xexp216  10 

我目前追加這樣的給定的索引,但我確定有這樣做的更好的方法?

res = df_table.index.tolist() 
nets = [] 
for i in df_table.index: 
    if 'Net: ' in i: 
     nets.append(res.pop(res.index(i))) 

res.extend(nets) 
df_table = df_table.reindex(res) 
+0

所以你想預先安排這些行,然後將它們轉移到df的結尾?這也是你的索引而不是你的專欄? – EdChum 2015-02-11 10:54:51

回答

1

使用矢量化str.contains方法來掩蓋DF爲包含字符串,並在前面加上海峽行。 由於它目前是您的索引,因此重置索引以將其恢復爲列可能更簡單,然後過濾行並預先添加文本,在篩選的行上使用concat對其重新排序,然後再次設置索引:

In [64]: 

df = df.reset_index() 
df.loc[df.Name.str.contains('_xexp'), 'Name'] = 'Net: ' + df.Name 
df 
Out[64]: 
      Name exp1 
0  bnb_q8a12 41 
1  bnb_q8a8 36 
2  bnb_q8a2 30 
3 Net: _xexp0 20 
4 Net: _xexp73 16 
5  bnb_q8a7 10 
6 Net: _xexp216 10 
7  bnb_q8a3 10 

In [65]: 

df = pd.concat([df[~df.Name.str.contains('_xexp')], df[df.Name.str.contains('_xexp')]]) 
df 
Out[65]: 
      Name exp1 
0  bnb_q8a12 41 
1  bnb_q8a8 36 
2  bnb_q8a2 30 
5  bnb_q8a7 10 
7  bnb_q8a3 10 
3 Net: _xexp0 20 
4 Net: _xexp73 16 
6 Net: _xexp216 10 
In [66]: 

df = df.set_index('Name') 
df 
Out[66]: 
       exp1 
Name    
bnb_q8a12  41 
bnb_q8a8   36 
bnb_q8a2   30 
bnb_q8a7   10 
bnb_q8a3   10 
Net: _xexp0  20 
Net: _xexp73  16 
Net: _xexp216 10