Python 使用“对列值进行排序”;0“;列末尾的值

Python 使用“对列值进行排序”;0“;列末尾的值,python,pandas,Python,Pandas,我有一个像这样的数据框 pd.DataFrame({'A': [5, 2, 0, 0, -3, -2, 1]}).sort_values('A') Out[6]: A 4 -3 5 -2 2 0 3 0 6 1 1 2 0 5 在排序时,我希望在末尾有“0”值,以便生成的数据帧如下所示 A 4 -3 5 -2 6 1 1 2 0 5 2 0 3 0 有简单的(一行代码)解决方案吗?让我们尝试添加一个新列并按两列排序: df.assign(dummy=df.A

我有一个像这样的数据框

pd.DataFrame({'A': [5, 2, 0, 0, -3, -2, 1]}).sort_values('A')
Out[6]: 
   A
4 -3
5 -2
2  0
3  0
6  1
1  2
0  5
在排序时,我希望在末尾有“0”值,以便生成的数据帧如下所示

   A
4 -3
5 -2
6  1
1  2
0  5
2  0
3  0

有简单的(一行代码)解决方案吗?

让我们尝试添加一个新列并按两列排序:

df.assign(dummy=df.A.eq(0)).sort_values(['dummy','A']).drop('dummy', axis=1)
另一个选项,不是一行,是
mask
concat

mask = df['A'].eq(0)
df = pd.concat([df[~mask].sort_values('A'), df[mask]])
输出:

   A
4 -3
5 -2
6  1
1  2
0  5
2  0
3  0

首先
屏蔽
零,然后在列
A上使用
获得将对数据帧排序的索引:

df.iloc[df['A'].replace(0, np.nan).to_numpy().argsort()]


谢谢我还可以按降序使用吗?@idt\U tt是的,你可以简单地乘以
-1
,即
df.iloc[df['A'].mul(-1)。替换(0,np.nan)。to\u numpy().argsort()。
   A
4 -3
5 -2
6  1
1  2
0  5
2  0
3  0