Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据数据帧的行长度对其进行排序_Python_Pandas_Sorting_Dataframe_Data Science - Fatal编程技术网

Python 如何根据数据帧的行长度对其进行排序

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一起使用 要按行计算非

我有一个pandas数据框,我想按行的长度排序。数据帧如下所示:。数据帧由大约7000个事务组成。我想进行排序,以便包含最多项目的事务位于顶部。

您可以尝试:

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