Python 产生非整数的秩函数?

Python 产生非整数的秩函数?,python,pandas,dataframe,Python,Pandas,Dataframe,熊猫数据帧函数rank在返回值中返回整数和浮点数的混合,或者输出总是保证为1…N个整数,是否存在任何条件 如@TomAugspurger所示。如果它们是重复的,则它们可以是非整数。(但在任何情况下都是float64数据类型) 几个等级选项 In [12]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='min') Out[12]: A B 0 1 1 1 2 1 2 3

熊猫数据帧函数
rank
在返回值中返回整数和浮点数的混合,或者输出总是保证为1…N个整数,是否存在任何条件

如@TomAugspurger所示。如果它们是重复的,则它们可以是非整数。(但在任何情况下都是float64数据类型)

几个等级选项

In [12]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='min')
Out[12]: 
   A  B
0  1  1
1  2  1
2  3  1
3  4  1

[4 rows x 2 columns]

In [13]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='max')
Out[13]: 
   A  B
0  1  4
1  2  4
2  3  4
3  4  4

[4 rows x 2 columns]

In [14]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='first')
Out[14]: 
   A  B
0  1  1
1  2  2
2  3  3
3  4  4

[4 rows x 2 columns]

我发现上面的代码产生了一个浮点解。可能是熊猫版本问题或其他版本问题。正如对解决方案多样性的补充一样,以下内容也起到了作用

DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='min').astype(int);

这适用于任何可能在秩中使用的方法。

来自docstring:
定义:df.rank(self,axis=0,numeric_only=None,method='average',na_option='keep',sunsing=True)docstring:沿轴计算数值数据秩(1到n)。为相等的值分配了一个秩,该秩是这些值的秩的平均值
,因此,如果有多个项目具有相同的值,则不一定如此。@TomAugspurger:那么答案是否,它不能是浮点值?可以是浮点值。检查
df=pd.DataFrame({“a”:[1,2,3,3,4,5]})上的
df.rank()
@TomAugspurger:有没有办法让它将相同的整数秩不平均分配给相同的秩元素?所以输出总是整数?@user248237dfsf查看更新的答案“如果它们是重复的,那么它们可以是非整数”。那么这就是一个bug,或者至少需要一个额外的选项来控制如何解决关系。只有
method='average'
才能返回非整数。(当NAs与整数混合返回时,当然不包括
na_option='keep'
,这将强制整数浮动,这是另一个问题。)
DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='min').astype(int);