【发布时间】: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