Python 如何根据数据帧的行长度对其进行排序
我有一个pandas数据框,我想按行的长度排序。数据帧如下所示:。数据帧由大约7000个事务组成。我想进行排序,以便包含最多项目的事务位于顶部。您可以尝试:Python 如何根据数据帧的行长度对其进行排序,python,pandas,sorting,dataframe,data-science,Python,Pandas,Sorting,Dataframe,Data Science,我有一个pandas数据框,我想按行的长度排序。数据帧如下所示:。数据帧由大约7000个事务组成。我想进行排序,以便包含最多项目的事务位于顶部。您可以尝试: df.loc[pd.isna(df).sum(轴=1).排序值(轴=0).索引] 简而言之,它的作用是: pd.isna()。 接下来对每行进行求和(.sum(axis=1)),这将返回给定行中每行的NaN数。然后我对它进行排序并只返回已排序的索引,然后我将其提供给.loc[]方法以按请求的顺序返回行。与axis=1一起使用 要按行计算非
df.loc[pd.isna(df).sum(轴=1).排序值(轴=0).索引]
简而言之,它的作用是:
pd.isna()。
接下来对每行进行求和(.sum(axis=1)
),这将返回给定行中每行的NaN
数。然后我对它进行排序并只返回已排序的索引,然后我将其提供给.loc[]
方法以按请求的顺序返回行。与axis=1一起使用
要按行计算非空元素/NaN的数量,请根据它们的值对该系列进行排序
并使用其索引对数据帧重新编制索引:
以下是一个示例
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
请以可以复制到Python编辑器中的方式添加数据帧。这可能与您的问题有关:行是否都应该具有相同的长度,或者我是否遗漏了什么?请检查我的答案:)确实,虽然这通常是使用sum+isna完成的,但使用count可以简化
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