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);