2014-05-20 6 views
0

이 dataFrame의 두 열을 기준으로 정렬하려고하지만 시도한 방식이 효과가 없습니다. 이것은 아마도 기본적인 대답 일 것입니다. 어떤 도움을 주셔서 감사합니다.두 개의 서로 다른 dataFrame 열을 기준으로 정렬하는 방법은 무엇입니까?

product_desc activity_month prod_count pct_ch 
0  product_a  1/31/2014   53  NaN 
3  product_a  2/28/2014   52 -0.018868 
6  product_a  3/31/2014   50 -0.038462 
1  product_b  1/31/2014   44  NaN 
4  product_b  2/28/2014   43 -0.022727 
7  product_b  3/31/2014   41 -0.046512 
2  product_c  1/31/2014   36  NaN 
5  product_c  2/28/2014   35 -0.027778 
8  product_c  3/31/2014   34 -0.028571 

가 어떻게 다르게 이런 종류의 접근해야

product_desc activity_month prod_count pct_ch 
6  product_a  3/31/2014   50 -0.038462 
3  product_a  2/28/2014   52 -0.018868 
0  product_a  1/31/2014   53  NaN 
4  product_b  2/28/2014   43 -0.022727 
7  product_b  3/31/2014   41 -0.046512 
1  product_b  1/31/2014   44  NaN 
2  product_c  1/31/2014   36  NaN 
8  product_c  3/31/2014   34 -0.028571 
5  product_c  2/28/2014   35 -0.027778 

는 내가 원하는 것은 이것이다 :

import pandas 
from pandas import DataFrame, Series 

data = [ 
('product_a','1/31/2014',53) 
,('product_b','1/31/2014',44) 
,('product_c','1/31/2014',36) 
,('product_a','2/28/2014',52) 
,('product_b','2/28/2014',43) 
,('product_c','2/28/2014',35) 
,('product_a','3/31/2014',50) 
,('product_b','3/31/2014',41) 
,('product_c','3/31/2014',34) 
] 

product_df = DataFrame(data, columns=['product_desc','activity_month','prod_count']) 

product_df['pct_ch'] = product_df.groupby('product_desc')['prod_count'].pct_change() 

product_df = product_df.sort('activity_month','product_desc') 

여기에 결과는?

업데이트 : 나는 날짜로 activity_month을 변경하고 아래에있는 내 정렬 논리를 업데이트하고 여전히 오른쪽 출력하지 않고 결과를 얻을 수 있습니다.

product_df = product_df.sort(['activity_month','product_desc']) 

    product_desc  activity_month prod_count pct_ch 
0  product_a  2014-01-31   53  NaN 
1  product_b  2014-01-31   44  NaN 
2  product_c  2014-01-31   36  NaN 
3  product_a  2014-02-28   52 -0.018868 
4  product_b  2014-02-28   43 -0.022727 
5  product_c  2014-02-28   35 -0.027778 
6  product_a  2014-03-31   50 -0.038462 
7  product_b  2014-03-31   41 -0.046512 
8  product_c  2014-03-31   34 -0.028571 
+0

:'[ 'activity_month', 'product_desc']'당신은 정렬에서 두 번째로 첫 번째 변수 activity_month 같은 'product_desc'을 원하는 . 따라서 전체 명령은 다음과 같아야합니다 :'product_df.sort ([ 'activity_month', 'product_desc'])' –

+0

덧붙여 말하자면'activity_month'를 문자열로 유지해야 할 이유가 있습니까? – exp1orer

+0

나는 날짜로 그들을 원하고 그것을 논리에 추가했다. 그러나 그것은 차이를 만들지 않았습니다. 내 질문에 업데이트 된 출력을 제공했습니다. – analyticsPierce

답변

1

여러 열을 정렬 sort()는 열의 목록 (그래서에서 열 이름 []를 바꿈) 예상 및 순서는 중요하다. 당신은 목록으로 괄호에 종류의 열을 포장 할 필요가

>>> product_df.sort(['product_desc','activity_month']) 

    product_desc activity_month prod_count pct_ch 
0 product_a  2014-01-01   53  NaN 
3 product_a  2014-02-01   52 -0.018868 
6 product_a  2014-03-01   50 -0.038462 
1 product_b  2014-01-01   44  NaN 
4 product_b  2014-02-01   43 -0.022727 
7 product_b  2014-03-01   41 -0.046512 
2 product_c  2014-01-01   36  NaN 
5 product_c  2014-02-01   35 -0.027778 
8 product_c  2014-03-01   34 -0.028571 
관련 문제