2017-11-22 6 views
2
R 임의로 관계를 끊는 방법 순위 함수를 사용하여

가 간단 모두 scipy (scipy.stats.rankdata)와 팬더 (pandas.Series.rank)을 가지고 있지만,순위 때 타이 브레이커는 랜덤

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

그러나 순위 함수는 그 중 아무 것도 매듭을 무작위로 끊는 방법을 제안하지 않습니다. 이 기능이있는 파이썬에서 프레임 워크를 사용하는 간단한 방법이 있습니까? 주어진 목록 순서는 동일하게 유지되어야합니다.

답변

3

팬더 '순위는 이러한 방법을 허용 : 시리즈 무작위 한 후

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]) 
실행 53,691,363,210

시험 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