Python 为什么不';t熊猫“;排名;百分位数介于0和1之间?

Python 为什么不';t熊猫“;排名;百分位数介于0和1之间?,python,pandas,rank,percentile,Python,Pandas,Rank,Percentile,我经常使用pandas,并经常执行与以下代码类似的代码: df['var_rank'] = df['var'].rank(pct=True) print( df.var_rank.max() ) 并且通常会得到大于1的值。无论我保留还是删除“na”值,这种情况仍然会发生。这显然很容易修复(只需除以最大秩的值),所以我不要求解决这个问题。我只是好奇为什么会发生这种情况,但在网上没有发现任何线索 有人知道为什么会这样吗 一些非常简单的示例数据(dropbox链接-酸洗熊猫系列) 我从df.rank

我经常使用pandas,并经常执行与以下代码类似的代码:

df['var_rank'] = df['var'].rank(pct=True)
print( df.var_rank.max() )
并且通常会得到大于1的值。无论我保留还是删除“na”值,这种情况仍然会发生。这显然很容易修复(只需除以最大秩的值),所以我不要求解决这个问题。我只是好奇为什么会发生这种情况,但在网上没有发现任何线索

有人知道为什么会这样吗

一些非常简单的示例数据(dropbox链接-酸洗熊猫系列)

我从
df.rank(pct=True.max()
中得到一个值1.0156。我有其他数据的值高达4或5。我通常使用非常混乱的数据。

您的数据不好

>>> s.rank(pct=True).max()
1.015625

s.sort(inplace=True)
>>> s.tail(7)
8      202512882
6      253661077
102            -
101            -
99             -
58             -
116            -
Name: Total Assets, dtype: object

>>> s[s != u'-'].rank(pct=True).max()
1.0
在Pandas 0.18.0(上周发布)中,您可以指定:

我在0.18.0中尝试了上述方法,但似乎无法使其发挥作用,因此您也可以这样对所有浮点值和int值进行排序:

>>> s[s.apply(lambda x: isinstance(x, (int, float)))].rank(pct=True).max()
1.0

它会创建一个布尔掩码,确保每个值都是int或float,然后对过滤结果进行排序。

请发布一些示例数据,这些数据给出的值大于1?编辑问题,并链接到一些数据。我假设它来自这些非数值观察,但我的直觉是,这些条目将百分位数限制在1以下(例如,如果一半的数据不好,那么我的排名最高的观察值将是0.5)。无论如何,很高兴知道更新。
>>> s[s.apply(lambda x: isinstance(x, (int, float)))].rank(pct=True).max()
1.0