首页 > 解决方案 > 如何停止 sort_values 按字母顺序按列名排序?

问题描述

我正在使用熊猫数据框,其中一些列没有条目。我想把所有列放在最后,我设法做到了(见下面的代码),但我也注意到,在对剩余的列进行排序后,也按列名的字母顺序按降序排序。我可以防止这种情况发生吗?

输入数据框:

,colA,colB,colC,colD,colF
rowA,X,nan,nan,X,nan
rowB,nan,X,nan,nan,X
rowC,X,nan,nan,X,X
rowD,X,nan,nan,nan,nan
rowE,nan,X,nan,nan,X

代码:

import pandas as pd
df = pd.read_csv (r'q1.csv', dtype= 'str', index_col=0, na_values = 'nan')
ind = df.notnull().astype('int').any().sort_values(ascending= False).index
out = df.loc[:,ind]
out.to_csv(r'out.csv', na_rep= 'nan')

输出数据框:

,colF,colD,colB,colA,colC
rowA,nan,X,nan,X,nan
rowB,X,nan,X,nan,nan
rowC,X,X,nan,X,nan
rowD,nan,nan,nan,X,nan
rowE,X,nan,X,nan,nan

本质上,我想保持所有其他列的顺序。

谢谢。

标签: python-3.xpandassortingdataframe

解决方案


如果我理解正确,你可以试试这个。

m = df.isna().all().sort_values(kind='mergesort')
df_new = df[m.index]

Out[243]:
     colA colB colD colF  colC
rowA    X  NaN    X  NaN   NaN
rowB  NaN    X  NaN    X   NaN
rowC    X  NaN    X    X   NaN
rowD    X  NaN  NaN  NaN   NaN
rowE  NaN    X  NaN    X   NaN

推荐阅读