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