我的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看起来像这样,所有索引都命名为" Net:_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 :(得分:1)
使用向量化的str.contains
方法来屏蔽包含字符串的行的df并添加str。
由于它当前是您的索引,因此重置索引以将其还原为列可能更简单,然后过滤行并添加文本,在过滤的行上使用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