2016-06-02 4 views
0
data = pandas.DataFrame(numpy.random.randn(4,3)) 

print data 

Out[4]: 

      0   1   2 

0 -1.122880 -2.662009 1.180418 

1 -0.335768 0.162640 0.105928 

2 -1.282813 0.049638 1.532208 

3 -0.422884 -1.110049 0.031648 

거대한 데이터 세트로 작업하고 DataFrame 요소의 순위를 결정하는 튜플을 효율적으로 반환하려고합니다. apply(), rank() 등의 몇 가지 어색한 시퀀스를 시도했지만 더 멋진 것을 원합니다.pandas - 데이터 프레임의 순위 요소

get_ranks(data)과 같은 함수를 찾고 (행, 열) 튜플의 정렬 된 집합을 반환합니다. 그래서 위의 경우 : (2,2), (3,2), (1,1), ...

나는 여러 군데를 조사했으나 이것에 적용되는 해설을 찾지 못했습니다. 특히. 나는 그저 열이나 열을 함께 고양이가 거기에서 순위를 매겨 야하나요? 아니면 더 직접적인 경로가 있습니까? 여기

답변

1

은 당신이 할 수있는 것입니다 :

>>> import pandas as pd 
>>> import numpy as np 
>>> df = pd.DataFrame(np.random.randn(4,3))                  
>>> df 
      0   1   2 
0 1.644294 1.476467 -0.137539 
1 -0.448040 -0.329539 -0.996425 
2 -1.015308 -1.397746 0.369095 
3 -0.570194 -0.989716 -1.489257 
>>> df2 = pd.DataFrame(df.values.flatten()) 
>>> df2 
      0 
0 1.644294 
1 1.476467 
2 -0.137539 
3 -0.448040 
4 -0.329539 
5 -0.996425 
6 -1.015308 
7 -1.397746 
8 0.369095 
9 -0.570194 
10 -0.989716 
11 -1.489257 
>>> df3 = df2.rank() 
>>> df3['row'] = df3.index % 4 
>>> df3['column'] = (df3.index/4).astype(int)                  
>>> df3 
     0 row column 
0 12.0 0  0 
1 11.0 1  0 
2 9.0 2  0 
3 7.0 3  0 
4 8.0 0  1 
5 4.0 1  1 
6 3.0 2  1 
7 2.0 3  1 
8 10.0 0  2 
9 6.0 1  2 
10 5.0 2  2 
11 1.0 3  2 

일부 설명 :

내가 평탄화 된 배열 값의 순위를 얻을 수 rank()를 사용하여 다음 원래 DataFrame을 평평하게합니다. 그런 다음 모듈러스 및 나누기 연산을 사용하여 값의 원래 위치를 가져옵니다.

결과 데이터 프레임에는 3 개의 열이 있습니다. 첫 번째 열은 값의 순위이며 (12 -> max, 1 -> min), 두 번째 열은 값의 원래 행의 인덱스이고 세 번째 열은 값의 원의 렬의 인덱스

도움이 될 것입니다. 완전히 알려지지 않았 으면 알려주세요.

+0

와우, 그래, 덕분에 걸릴. 같은 일을하고 있었지만 분명히 똑 바르지 않았습니다. – user6412731

1

stack 당신의 dataframe, 다음 ascending=Falsesort_valuesindex.tolist()

data.stack().sort_values(ascending=False).index.tolist() 
+0

이것은 너무 좋습니다. 고마워. – user6412731

관련 문제