一个笨重的方法是暂时添加列b的
abs值,然后使用该列添加
sort,然后添加
drop:
In [162]:
df['sort'] = df.b.abs()
df.sort(columns='sort').drop('sort', axis=1)
Out[162]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
另一种方法是查看’b’的abs值,对其调用sort然后调用reindex传递系列的索引:
In [176]:
t = df.b.abs()
t.sort()
df.reindex(t.index)
Out[176]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
编辑
以上可以作为一个班轮来完成:
In [179]:
df.reindex(df.b.abs().sort(inplace=False).index)
Out[179]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
默认排序为inplace = True,因此显式传递inplace = False将返回该系列.
另一个编辑
感谢主人@Jeff这个未知的方法(反正对我来说),你可以在abs的结果上调用order,这样可以得到更干净的代码:
In [31]:
df.reindex(df.b.abs().order().index)
Out[31]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
UPDATE
自0.17.0订单和排序已被弃用(感谢@Ruggero Turra),您现在可以使用sort_values来实现此目的:
In[16]:
df.reindex(df.b.abs().sort_values().index)
Out[16]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9