用熊猫排名的浮点数给了我错误的排名

发布于 2025-02-10 22:48:56 字数 1530 浏览 1 评论 0原文

我正在使用下面的代码创建一些资产的浮点数的排名,但是输出并未考虑小数点之前的两个数字,因此它首先将数字9.00、8.00、6.00放在数字17.00、16.00、15之前。 ,00。

df = df[['twelve_m_yield']]
df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])

print(df)

这就是结果:

       twelve_m_yield  ranking_twelve_m_yield
ticker                                       
MGFF11           9.91                     1.0
BTAL11           9.81                     2.0
SARE11           9.75                     3.0
KFOF11           9.54                     4.0
...
KNRI11           6.88                    20.0
HGPO11           6.72                    21.0
HGBS11           6.56                    22.0
VGHF11          17.01                    23.0
VGIP11          15.87                    24.0
DEVA11          15.73                    25.0
...
IRDM11          12.95                    36.0
CPTS11          12.95                    37.0
TGAR11          12.06                    38.0
HGCR11          11.76                    39.0
OUFF11          11.68                    40.0

````

But the result that I would like to achieve would be :


````

VGHF11          17.01                    1.0
VGIP11          15.87                    2.0
DEVA11          15.73                    3.0
...
KNRI11           6.88                    38.0
HGPO11           6.72                    39.0
HGBS11           6.56                    40.0

```

What should I change to achieve that? Thanks

I am creating a ranking of float numbers of some assets with the code below, but the output is not considering the two digits before the decimal point, so it is putting first the numbers 9.00, 8.00, 6.00 before the numbers 17.00, 16.00, 15,00.

df = df[['twelve_m_yield']]
df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])

print(df)

And that is the result:

       twelve_m_yield  ranking_twelve_m_yield
ticker                                       
MGFF11           9.91                     1.0
BTAL11           9.81                     2.0
SARE11           9.75                     3.0
KFOF11           9.54                     4.0
...
KNRI11           6.88                    20.0
HGPO11           6.72                    21.0
HGBS11           6.56                    22.0
VGHF11          17.01                    23.0
VGIP11          15.87                    24.0
DEVA11          15.73                    25.0
...
IRDM11          12.95                    36.0
CPTS11          12.95                    37.0
TGAR11          12.06                    38.0
HGCR11          11.76                    39.0
OUFF11          11.68                    40.0

````

But the result that I would like to achieve would be :


````

VGHF11          17.01                    1.0
VGIP11          15.87                    2.0
DEVA11          15.73                    3.0
...
KNRI11           6.88                    38.0
HGPO11           6.72                    39.0
HGBS11           6.56                    40.0

```

What should I change to achieve that? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゞ记忆︶ㄣ 2025-02-17 22:48:56

正如评论中提到的那样,您的问题可能来自Twelve_m_yield列是对象类型。

data={'title':['a','b','c','d','e','f','g','h','i','j','k','l','m','n'],"twelve_m_yield":['9.11','10.10','9.6','8.23','14.14','9.77','10','19.11','60.10','12.6','13.23','18.14','29.77','10.99']}

df=pd.DataFrame(data)

df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])
print("twelve_m_yield as string:")
print(df)


df=pd.DataFrame(data)
df['twelve_m_yield']=pd.to_numeric(df['twelve_m_yield'], downcast="float")
df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])

print("twelve_m_yield as numeric:")
print(df)

结果:

twelve_m_yield as string:
   title twelve_m_yield  ranking_twelve_m_yield
5      f           9.77                     1.0
2      c            9.6                     2.0
0      a           9.11                     3.0
3      d           8.23                     4.0
8      i          60.10                     5.0
12     m          29.77                     6.0
7      h          19.11                     7.0
11     l          18.14                     8.0
4      e          14.14                     9.0
10     k          13.23                    10.0
9      j           12.6                    11.0
13     n          10.99                    12.0
1      b          10.10                    13.0
6      g             10                    14.0
twelve_m_yield as numeric:
   title  twelve_m_yield  ranking_twelve_m_yield
8      i       60.099998                     1.0
12     m       29.770000                     2.0
7      h       19.110001                     3.0
11     l       18.139999                     4.0
4      e       14.140000                     5.0
10     k       13.230000                     6.0
9      j       12.600000                     7.0
13     n       10.990000                     8.0
1      b       10.100000                     9.0
6      g       10.000000                    10.0
5      f        9.770000                    11.0
2      c        9.600000                    12.0
0      a        9.110000                    13.0
3      d        8.230000                    14.0

As mentionned in comment your problem is probably coming from than the column twelve_m_yield is Object type.

data={'title':['a','b','c','d','e','f','g','h','i','j','k','l','m','n'],"twelve_m_yield":['9.11','10.10','9.6','8.23','14.14','9.77','10','19.11','60.10','12.6','13.23','18.14','29.77','10.99']}

df=pd.DataFrame(data)

df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])
print("twelve_m_yield as string:")
print(df)


df=pd.DataFrame(data)
df['twelve_m_yield']=pd.to_numeric(df['twelve_m_yield'], downcast="float")
df['ranking_twelve_m_yield'] = df['twelve_m_yield'].rank(ascending=False, method='first')
df = df.sort_values(by=['ranking_twelve_m_yield'])

print("twelve_m_yield as numeric:")
print(df)

Result:

twelve_m_yield as string:
   title twelve_m_yield  ranking_twelve_m_yield
5      f           9.77                     1.0
2      c            9.6                     2.0
0      a           9.11                     3.0
3      d           8.23                     4.0
8      i          60.10                     5.0
12     m          29.77                     6.0
7      h          19.11                     7.0
11     l          18.14                     8.0
4      e          14.14                     9.0
10     k          13.23                    10.0
9      j           12.6                    11.0
13     n          10.99                    12.0
1      b          10.10                    13.0
6      g             10                    14.0
twelve_m_yield as numeric:
   title  twelve_m_yield  ranking_twelve_m_yield
8      i       60.099998                     1.0
12     m       29.770000                     2.0
7      h       19.110001                     3.0
11     l       18.139999                     4.0
4      e       14.140000                     5.0
10     k       13.230000                     6.0
9      j       12.600000                     7.0
13     n       10.990000                     8.0
1      b       10.100000                     9.0
6      g       10.000000                    10.0
5      f        9.770000                    11.0
2      c        9.600000                    12.0
0      a        9.110000                    13.0
3      d        8.230000                    14.0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文