我有一个熊猫数据框,我想按其行长排序。数据框如下所示:a dataset loaded into a dataframe。该数据帧由大约7000笔交易。我要进行排序,以使包含最多项目的交易位于顶部。
答案 0 :(得分:1)
您可以尝试:
df.loc[pd.isna(df).sum(axis=1).sort_values(axis=0).index]
简而言之,它的作用是:
如果原始数据帧中的各个单元格为pd.isna()
,则true/false
将返回形状与您的True
相同的NaN
数据帧。
接下来,您对每行(.sum(axis=1)
)进行汇总,这将返回给定行中每一行的NaN
数。然后,我将其排序并仅返回排序后的索引,然后将其提供给.loc[]
方法以按请求的顺序返回行。
答案 1 :(得分:0)
将DataFrame.count
与axis = 1
一起使用
计算非空元素/ NaN的行数,然后根据其值对该系列进行排序
并使用其索引以DataFrame.reindex
重新索引数据框:
df.reindex(index=df.count(axis=1).sort_values(ascending=False).index)
以下是示例
df=pd.DataFrame({'col1':[1,2,np.nan],'col2':[np.nan,4,np.nan],'col3':[1,2,3]})
print(df)
col1 col2 col3
0 1.0 NaN 1
1 2.0 4.0 2
2 NaN NaN 3
df=df.reindex(index=df.count(axis=1).sort_values(ascending=False).index).
print(df)
col1 col2 col3
1 2.0 4.0 2
0 1.0 NaN 1
2 NaN NaN 3