python-2.7 - 如何按列值对数据框进行排序?

标签 python-2.7 pandas dataframe

我对 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))

这是唯一可能的方法吗?

最佳答案

您可以使用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

另一个解决方案是 apply sort_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

关于python-2.7 - 如何按列值对数据框进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37140223/

相关文章:

python - 如何使用 group by 检查数据框列中的值是否在另一个数据框的列中

python - 从列表中的名称中选择数据框列

Python/Pandas - "subtext"整数

r - 仅使用多列中的特定值创建新数据框

R:将单列数据框的特定行重新排列到新列中

python - 动态构建字符串 'string' .format()

python - 为什么与多个 Popen 子进程一起使用时会发生通信死锁?

python - 元类是否首先实例化类的属性?

python-2.7 - 如何覆盖 Flask-Admin 的 edit_form() 将以前的值保留为占位符

python - 将 python pandas 数据帧写入 csv 文件时出错