我有两行的pandas DataFrame,我试图排名。两行中的一行排名正确,但另一行不是:
import pandas as pd
df = pd.DataFrame([
['47', '196', '82', '-7', '72', '-38', '27', '53', '103', '25', '-61', '-41', '59', '-11'],
['324', '304', '296', '274', '264', '249', '227', '226', '213', '199', '196', '177', '174', '157']
])
print df
print df.rank(ascending=False, axis=1)
输出:
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 47 196 82 -7 72 -38 27 53 103 25 -61 -41 59 -11
1 324 304 296 274 264 249 227 226 213 199 196 177 174 157
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 5 8 1 10 2 13 6 4 9 7 11 12 3 14
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14
第1行正确排名从最高到最低,但第0行显然不是。我误解了熊猫排名方法,还是我做错了什么?非常感谢
编辑:我的值是字符串而不是整数,因此排名不正确。问题解决了,谢谢所有
答案 0 :(得分:2)
可能是因为你使用str声明而不是int。试试这个,
df = pd.DataFrame([ [47, 196, 82, -7, 72, -38, 27, 53, 103, 25,-61, -41, 59, -11],
[324, 304, 296, 274, 264, 249, 227, 226, 213, 199, 196, 177, 174, 157]])
print (df )
print (df.rank(ascending=False, axis=1))
这将产生,
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 47 196 82 -7 72 -38 27 53 103 25 -61 -41 59 -11
1 324 304 296 274 264 249 227 226 213 199 196 177 174 157
[2 rows x 14 columns]
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 7 1 3 10 4 12 8 6 2 9 14 13 5 11
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14
[2 rows x 14 columns]
答案 1 :(得分:1)
d'哦。我的值是字符串而不是整数...