当领带破坏者是随机的时候,在python中用关系排名

时间:2017-11-22 08:21:23

标签: python r pandas scipy

在R中,使用秩函数时随机断开关系的方法很简单:

rank(my_vec, ties.method = "random")

然而,虽然scipy(scipy.stats.rankdata)和pandas(pandas.Series.rank)都有排名函数,但它们都没有提出一种随机打破关系的方法。 有没有一种简单的方法在python中使用具有此功能的框架?鉴于列表顺序必须保持不变。

1 个答案:

答案 0 :(得分:3)

熊猫' rank允许这些方法:

method : {'average', 'min', 'max', 'first', 'dense'}
    * average: average rank of group
    * min: lowest rank in group
    * max: highest rank in group
    * first: ranks assigned in order they appear in the array
    * dense: like 'min', but rank always increases by 1 between groups

简单地说""实现您的目标,我们可以在随机化系列之后使用'first'

假设我的系列名为my_vec

my_vec.sample(frac=1).rank(method='first')

然后您可以按照与

相同的顺序将其恢复
my_vec.sample(frac=1).rank(method='first').reindex_like(my_vec)

示例运行

my_vec = pd.Series([1, 2, 3, 1, 2, 3])

试用1

my_vec.sample(frac=1).rank(method='first').reindex_like(my_vec)

0    2.0  <- I expect this and
1    4.0
2    6.0
3    1.0  <- this to be first ranked
4    3.0
5    5.0
dtype: float64

试用2

my_vec.sample(frac=1).rank(method='first').reindex_like(my_vec)

0    1.0  <- Still first ranked
1    3.0
2    6.0
3    2.0  <- but order has switched
4    4.0
5    5.0
dtype: float64