【问题标题】:How to sort data frame by column values?如何按列值对数据框进行排序?
【发布时间】:2016-09-05 12:45:45
【问题描述】:

我对 python 和 pandas 数据帧比较陌生,所以我可能在这里错过了一些非常简单的东西。 所以我有很多行和列的数据框,但最后最终设法从每列中只得到一个具有最大值的行。我用这段代码来做到这一点:

import pandas as pd

d = {'A' : [1.2, 2, 4, 6],
     'B' : [2, 8, 10, 12],
     'C' : [5, 3, 4, 5],
     'D' : [3.5, 9, 1, 11],
     'E' : [5, 8, 7.5, 3],
     'F' : [8.8, 4, 3, 2]}


df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
print df

Out:
     A   B  C     D    E    F
a  1.2   2  5   3.5  5.0  8.8
b  2.0   8  3   9.0  8.0  4.0
c  4.0  10  4   1.0  7.5  3.0
d  6.0  12  5  11.0  3.0  2.0

然后为了从每一列中选择最大值,我使用了这个函数:

def sorted(s, num):
    tmp = s.order(ascending=False)[:num]
    tmp.index = range(num)
    return tmp

NewDF=df.apply(lambda x: sorted(x, 1))
print NewDF

Out:
     A   B  C     D    E    F
0  6.0  12  5  11.0  8.0  8.8

是的,我丢失了行标签(无论是索引),但这个列标签对我来说更重要。现在我只需要根据其中的值对我需要前 5 列的列进行排序,我需要这个输出:

Out:
   B     D   F    E    A    
0  12.0  11  8.8  8.0  6.0

我一直在寻找解决方案,但没有运气。我发现按列排序的最佳方法是 print NewDF.sort(axis=1) 但没有任何反应。

编辑: 好的,我找到了一种方法,但需要转换:

transposed = NewDF.T
print(transposed.sort([0], ascending=False))

这是唯一可行的方法吗?

【问题讨论】:

    标签: python-2.7 pandas dataframe


    【解决方案1】:

    您可以将maxnlargest 一起使用,因为nlargest 对输出进行排序:

    print df.max().nlargest(5)
    B    12.0
    D    11.0
    F     8.8
    E     8.0
    A     6.0
    dtype: float64
    

    然后转换为DataFrame:

    print pd.DataFrame(df.max().nlargest(5)).T
          B     D    F    E    A
    0  12.0  11.0  8.8  8.0  6.0
    

    编辑:

    如果需要排序一行DataFrame:

    print NewDF.T.sort_values(0, ascending=False)
          0
    B  12.0
    D  11.0
    F   8.8
    E   8.0
    A   6.0
    C   5.0
    

    另一种解决方案是applysort_values

    print NewDF.apply(lambda x: x.sort_values(ascending=False), axis=1)
          B     D    F    E    A    C
    0  12.0  11.0  8.8  8.0  6.0  5.0
    

    【讨论】:

    • 嗯,看来我找到了没有转置的解决方案。请检查编辑。
    • 哇,这么简单!非常感谢!
    • 也感谢您的参考 :) 我在想箭头向上是我能做的所有事情来确认答案是好的,现在我也点击了接受标记。再次感谢 jezrael
    猜你喜欢
    • 2021-10-29
    • 2022-11-12
    • 2020-06-14
    • 2021-05-15
    • 2010-11-20
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多