如何停止按列名按字母顺序对sort_values排序?

时间:2019-11-28 22:20:08

标签: python-3.x pandas sorting dataframe

我正在使用pandas数据框,其中某些列没有条目。我想将所有列都放在末尾,并设法做到这一点(请参见下面的代码),但是我还注意到,在对其余列进行排序之后,它们也按列名的字母顺序降序排列。我可以防止这种情况发生吗?

输入数据框:

,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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以尝试一下。

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