按行/列排序标签

时间:2013-04-12 20:59:24

标签: python pandas

说我有一个数据框:

df = pandas.DataFrame(np.random.randn(5,3),
columns = ['A','B','C'], 
index   = ['r0', 'r1', 'r2', 'r3', 'r4')

          A         B         C
r0 -0.830305 -0.395235  0.589917
r1 -1.378534 -0.484204 -1.068907
r2 -0.407720  1.922942 -1.120012
r3  1.075495  0.968913  1.509079
r4 -2.858858  1.018327 -0.660672

我想获得一个新的数据框,其中,对于每一行,我都有按名称排序的列名列表。

对于上面的示例,按列descending order排序的结果为:

    0  1  2
r0  C  B  A
r1  A  B  C
r2  B  A  C
r3  C  A  B
r4  B  C  A

是否有“Pandas / numpy”方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

一种方法是在每一行上使用order Series方法(并获取索引):

In [11]: df
Out[11]:
           A         B         C
r0  0.213505 -0.661328  1.489605
r1 -1.096459 -0.373994 -1.948745
r2  0.380518 -1.424787 -0.639996
r3 -0.327361  1.029477  0.153808
r4 -0.593371  0.112844  0.096872

In [12]: df.apply(lambda row: row.order(ascending=False).index, axis=1)
Out[12]:
    A  B  C
r0  C  A  B
r1  B  A  C
r2  A  C  B
r3  B  C  A
r4  B  C  A

要打破它:

In [21]: row = df.ix[0]

In [22]: row
Out[22]:
A    0.213505
B   -0.661328
C    1.489605
Name: r0

In [23]: row.order(ascending=False)
Out[23]:
C    1.489605
A    0.213505
B   -0.661328
Name: r0

In [24]: row.order(ascending=False).index
Out[24]: Index([C, A, B], dtype=object)