【问题标题】:How to sort a pandas dataframe by the length of its rows如何按行的长度对熊猫数据框进行排序
【发布时间】:2019-12-02 06:14:25
【问题描述】:

我有一个 pandas 数据框,我想按行的长度对其进行排序。数据框如下所示:a dataset loaded into a dataframe。数据框由 ca 组成。 7000 笔交易。我想进行排序,以便包含最多项目的事务位于顶部。

【问题讨论】:

  • 请以可以复制到Python编辑器的方式添加DataFrame
  • 这可能与您的问题有关:stackoverflow.com/questions/45909776/…
  • 行不应该都具有相同的长度,还是我错过了什么?
  • 请检查我的答案:)

标签: python pandas sorting dataframe data-science


【解决方案1】:

你可以试试:

df.loc[pd.isna(df).sum(axis=1).sort_values(axis=0).index]

简而言之,它的作用是: pd.isna() 将返回true/false 与原始数据帧形状相同的数据帧,如果相应的单元格在原始数据帧中是NaN,则True。 接下来,您对每行 (.sum(axis=1)) 进行总结,这将为每一行返回给定行中 NaN 的数量。然后我对其进行排序并仅返回排序后的索引,然后我将其提供给.loc[] 方法以按请求的顺序返回行。

【讨论】:

  • 真的,虽然这通常是用 sum + isna 来完成的,但是用 count 来简化
【解决方案2】:

DataFrame.countaxis = 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

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多