pandas DataFrame 排名错误

0 投票
2 回答
1152 浏览
提问于 2025-04-18 02:17

我有一个 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]

撰写回答