pandas DataFrame 排名错误
我有一个 pandas 的数据表,里面有两行数据,我想给它们排个名。其中一行的排名是正确的,但另一行却不对:
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
第一行的排名从高到低是正确的,但第一行的排名明显不对。我是不是对 pandas 的排名方法理解错了,还是我做错了什么?非常感谢大家
补充:我的值是字符串而不是整数,所以排名不正确。问题解决了,谢谢大家
2 个回答
1
哎呀,我的值是字符串,而不是整数...
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]