【问题标题】:sort column based on specific column | python | pandas [duplicate]根据特定列对列进行排序 |蟒蛇 |熊猫[重复]
【发布时间】:2019-01-29 05:01:06
【问题描述】:

我有一个这样的数据框:

c234  0.4255  0.2348  0.4255
c234  0.876   0.456   0.876
c561  0.9527  0.263   0.9527
c561  0.4111  0.1543  0.4111
c561  0.8231  0.975   0.975

我想在每个1st column中对4th column进行排序,输出会是这样的:

c234  0.876   0.456   0.876
c234  0.4255  0.2348  0.4255
c561  0.8231  0.975   0.975
c561  0.9527  0.263   0.9527
c561  0.4111  0.1543  0.4111

有什么帮助吗?

【问题讨论】:

    标签: python pandas sorting group-by


    【解决方案1】:

    sort_values 获取列列表

    假设您的列名是[0, 1, 2, 3]

    df.sort_values([0, 3], ascending=[True, False])
    
          0       1       2       3
    1  c234  0.8760  0.4560  0.8760
    0  c234  0.4255  0.2348  0.4255
    4  c561  0.8231  0.9750  0.9750
    2  c561  0.9527  0.2630  0.9527
    3  c561  0.4111  0.1543  0.4111
    

    保留行位置

    假设第一列未排序并且您不希望它排序。您只想对每个组中的行进行排序。

    df.loc[
        df.groupby(0)[3].transform(
            lambda x: x.sort_values(ascending=False).index
        ).astype(df.index.dtype)
    ]
    
          0       1       2       3
    1  c234  0.8760  0.4560  0.8760
    0  c234  0.4255  0.2348  0.4255
    4  c561  0.8231  0.9750  0.9750
    2  c561  0.9527  0.2630  0.9527
    3  c561  0.4111  0.1543  0.4111
    

    但这并不有趣。假设数据框是这样的

          0       1       2       3
    0  c561  0.9527  0.2630  0.9527
    1  c234  0.4255  0.2348  0.4255
    2  c234  0.8760  0.4560  0.8760
    3  c561  0.4111  0.1543  0.4111
    4  c561  0.8231  0.9750  0.9750
    

    请注意,'c561' 位于顶部,更多位于底部。我们可以对它们进行排序并保持相同的行位置。让我们再次运行最后一个解决方案。

          0       1       2       3
    4  c561  0.8231  0.9750  0.9750
    2  c234  0.8760  0.4560  0.8760
    1  c234  0.4255  0.2348  0.4255
    0  c561  0.9527  0.2630  0.9527
    3  c561  0.4111  0.1543  0.4111
    

    【讨论】:

      【解决方案2】:

      使用sort_valuesascending 作为布尔列表来确定方向:

      df.sort_values([0,3], ascending=[True, False])
      

      输出:

            0       1       2       3
      1  c234  0.8760  0.4560  0.8760
      0  c234  0.4255  0.2348  0.4255
      4  c561  0.8231  0.9750  0.9750
      2  c561  0.9527  0.2630  0.9527
      3  c561  0.4111  0.1543  0.4111
      

      【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2012-06-19
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2014-12-29
      • 2022-12-13
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多