说我有一个数据框:
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”方法可以做到这一点?
答案 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)