是否有任何条件会使pandas dataframe函数rank
在其返回值中返回整数和浮点数的混合,或者输出始终保证为1 ... N整数?
答案 0 :(得分:9)
正如@TomAugspurger所指出的那样。如果它们是重复的,则它们可以是非整数的。 (但无论如何都是float64 dtype。)
In [7]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank()
Out[7]:
A B
0 1 2.5
1 2 2.5
2 3 2.5
3 4 2.5
[4 rows x 2 columns]
In [8]: DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank().dtypes
Out[8]:
A float64
B float64
dtype: object
多个排名选项
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]
答案 1 :(得分:0)
我发现上面的代码产生了一个浮动解决方案。可能是熊猫版本问题或其他版本问题。就像解决方案多样性的附录一样,以下操作同样有效。
DataFrame({'A' : Series([1,2,3,4]), 'B' : Series([1,1,1,1]) }).rank(method='min').astype(int);
这适用于等级内可以使用的任何方法。