根据在Python中组合列所形成的数量对行重新排序
我有一个由熊猫组成的数据框架,如下所示:根据在Python中组合列所形成的数量对行重新排序,python,pandas,sorting,dataframe,Python,Pandas,Sorting,Dataframe,我有一个由熊猫组成的数据框架,如下所示: a b c d e f g h i j k l m n o 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 4 0 0 0 0 0
a b c d e f g h i j k l m n o
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0
3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0
4 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0
5 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0
6 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0
7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0
9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
10 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0
11 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
12 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
13 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
15 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
16 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
我想对行进行排序,以便它们按降序排列。行的值是通过组合列形成的数字。例如,第1行是000000000000000,第2行是000000101010010。最终结果应将第6行作为第一行,第1行作为最后一行。我试过了
dat.sort_values(by=['a'], ascending=False, axis=0)
但这只是按第一列排序。是否有其他方法可以对行重新排序?按所有列的当前顺序排序:
df.sort_values(by=df.columns.tolist(), ascending=False)
# a b c d e f g h i j k l m n o
#6 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0
#3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0
#5 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0
#10 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0
#12 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
#15 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
#4 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0
#2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0
#11 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
#8 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0
#13 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
#9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
#16 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
#7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
#14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
#1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
按所有列的当前顺序排序:
df.sort_values(by=df.columns.tolist(), ascending=False)
# a b c d e f g h i j k l m n o
#6 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0
#3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0
#5 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0
#10 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0
#12 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
#15 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
#4 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0
#2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0
#11 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
#8 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0
#13 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
#9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
#16 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
#7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
#14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
#1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
使用键进行排序
df.loc[df.astype(str).sum(1).sort_values(ascending=False).index]
Out[871]:
a b c d e f g h i j k l m n o
6 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0
3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0
5 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0
10 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0
15 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
12 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
4 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0
2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0
11 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
8 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0
13 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
16 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
使用键进行排序
df.loc[df.astype(str).sum(1).sort_values(ascending=False).index]
Out[871]:
a b c d e f g h i j k l m n o
6 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0
3 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0
5 0 0 1 1 0 1 0 1 0 0 1 0 0 1 0
10 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0
15 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
12 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0
4 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0
2 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0
11 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0
8 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0
13 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0
16 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
按
索引排序
,轴=1应该可以df.sort_值(by=df.index.tolist(),axis=1,升序=False)
。如果我想对列而不是行进行排序,我将如何更改代码?换句话说,我想根据它们的数值(由列中的数字组成的数字)对列进行从大到大的排序。我懂了。感谢按索引排序
,轴=1应该可以df.sort_值(by=df.index.tolist(),axis=1,升序=False)
。如果我想对列而不是行进行排序,我将如何更改代码?换句话说,我想根据它们的数值(由列中的数字组成的数字)对列进行从大到大的排序。我懂了。感谢