大熊猫排名功能产生非整数?

时间:2014-01-07 15:20:02

标签: python pandas dataframe

是否有任何条件会使pandas dataframe函数rank在其返回值中返回整数和浮点数的混合,或者输出始终保证为1 ... N整数?

2 个答案:

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

这适用于等级内可以使用的任何方法。

相关问题