2014-01-17 4 views
0

색인 열에 원래 (비 알파벳순) 정렬 순서를 유지하면서 장고 쿼리 세트의 결과를 피벗하고 싶습니다. 피벗 된 데이터는 Google 시각화 챠트 차트에서 사용됩니다.피벗 데이터 및 원래 정렬 순서 유지

나는 일을하기 위해 내 자신의 코드를 해킹했지만 약간 추한 것이고 팬더 (pandas) DataFrame 피벗을 사용하여 수행 할 수 있는지 궁금해하고 있습니다.

필자는 전에 팬더를 사용 해본 적이 없기 때문에 doco를 읽은 후에 이것에 관해 생각해 봤습니다.

날짜와 테너로 정렬 된 피 벗어 데이터 프레임입니다. 테너 접미사는 다음과 같습니다. D = 일, M = 월, Y = 연도.

df = DataFrame(data) 

       date tenor  value 
0  2014-01-01 1D 0.517125 
1  2014-01-01 1M 0.5175 
2  2014-01-01 2M 0.518159 
3  2014-01-01 3M 0.5187 
4  2014-01-01 4M 0.51912 
5  2014-01-01 5M 0.51949 
6  2014-01-01 6M 0.5197 
7  2014-01-01 9M 0.519511 
8  2014-01-01 1Y 0.5198 
9  2014-01-01 18M 0.521228 
10  2014-01-01 2Y 0.523097 
11  2014-01-01 3Y 0.525054 
12  2014-01-01 4Y 0.527055 
13  2014-01-01 5Y 0.529054 
14  2014-01-01 6Y 0.531099 
15  2014-01-01 7Y 0.532852 
16  2014-01-01 8Y 0.534207 
17  2014-01-01 9Y 0.535314 
18  2014-01-02 1D 0.517874 
19  2014-01-02 1M 0.5181 
20  2014-01-02 2M 0.518451 
21  2014-01-02 3M 0.5188 
22  2014-01-02 4M 0.519113 
23  2014-01-02 5M 0.519418 
24  2014-01-02 6M 0.5196 
25  2014-01-02 9M 0.519377 
26  2014-01-02 1Y 0.5197 
27  2014-01-02 18M 0.521406 
28  2014-01-02 2Y 0.523405 
29  2014-01-02 3Y 0.525254 
30  2014-01-02 4Y 0.527151 
31  2014-01-02 5Y 0.529256 
32  2014-01-02 6Y 0.531543 
33  2014-01-02 7Y 0.533457 
34  2014-01-02 8Y 0.534802 
35  2014-01-02 9Y 0.535847 
36  2014-01-03 1D 0.518552 
37  2014-01-03 1M 0.5186 
38  2014-01-03 2M 0.518536 
39  2014-01-03 3M 0.5186 
40  2014-01-03 4M 0.518865 
41  2014-01-03 5M 0.51916 
42  2014-01-03 6M 0.5193 
43  2014-01-03 9M 0.519024 
44  2014-01-03 1Y 0.5193 
45  2014-01-03 18M 0.520882 
46  2014-01-03 2Y 0.5228 
47  2014-01-03 3Y 0.524647 
48  2014-01-03 4Y 0.526752 
49  2014-01-03 5Y 0.528957 
50  2014-01-03 6Y 0.531065 
51  2014-01-03 7Y 0.532856 
52  2014-01-03 8Y 0.534325 
53  2014-01-03 9Y 0.535558 

피아노 피벗을 사용하면 다음과 같은 결과가 생성됩니다. 피벗이 작동했지만 행의 순서가 잘못되었습니다.

df_pivot = df.pivot(index='tenor', columns='date', values='value') 
tenor   2014-01-01 2014-01-02 2014-01-03 
18M    0.521228 0.521406 0.520882 
1D     0.517125 0.517874 0.518552 
1M     0.5175  0.5181  0.5186 
1Y     0.5198  0.5197  0.5193 
2M     0.518159 0.518451 0.518536 
2Y     0.523097 0.523405  0.5228 
3M     0.5187  0.5188  0.5186 
3Y     0.525054 0.525254 0.524647 
4M     0.51912 0.519113 0.518865 
4Y     0.527055 0.527151 0.526752 
5M     0.51949 0.519418 0.51916 
5Y     0.529054 0.529256 0.528957 
6M     0.5197  0.5196  0.5193 
6Y     0.531099 0.531543 0.531065 
7Y     0.532852 0.533457 0.532856 
8Y     0.534207 0.534802 0.534325 
9M     0.519511 0.519377 0.519024 
9Y     0.535314 0.535847 0.535558 
나는 테너 열을 기준으로 정렬 된 결과 싶습니다

:

tenor   2014-01-01 2014-01-02 2014-01-03 
1D     0.517125 0.517874 0.518552 
1M     0.5175  0.5181  0.5186 
2M     0.518159 0.518451 0.518536 
3M     0.5187  0.5188  0.5186 
4M     0.51912 0.519113 0.518865 
5M     0.51949 0.519418 0.51916 
6M     0.5197  0.5196  0.5193 
9M     0.519511 0.519377 0.519024 
1Y     0.5198  0.5197  0.5193 
18M    0.521228 0.521406 0.520882 
2Y     0.523097 0.523405  0.5228 
3Y     0.525054 0.525254 0.524647 
4Y     0.527055 0.527151 0.526752 
5Y     0.529054 0.529256 0.528957 
6Y     0.531099 0.531543 0.531065 
7Y     0.532852 0.533457 0.532856 
8Y     0.534207 0.534802 0.534325 
9Y     0.535314 0.535847 0.535558 

내가 가진 것을 사용 후 비교 할 때 일 테너 값을 변환 할 사용자 정의 정렬 함수를 작성 생각했습니다를 pandas (확실하지 않은 방법).

google visualization pivot을 사용하여 조사했지만 기존의 DataTable이 아닌 쿼리에서만 작동하는 것으로 보입니다.

다른 의견이 있으면 크게 환영 할 것입니다.

답변

2

일 단위와 월 단위를 비교하는 경우 단위가 불분명합니다 (예 : 30D 또는 1M)? 이 문제가없는 경우, 당신은 DataFrame 순서를 reindex() 방법을 사용할 수 있습니다 :

import pandas as pd 

df_pivot = df.pivot(index='tenor', columns='date', values='value') 

DayCounts = {"D":1, "M":365.0/12, "Y":365} 
index = sorted(df_pivot.index, key=lambda v:int(v[:-1])*DayCounts[v[-1]]) 

df_pivot.reindex(index) 

출력 : 내가 필요

date 2014-01-01 2014-01-02 2014-01-03 
1D  0.517125 0.517874 0.518552 
1M  0.517500 0.518100 0.518600 
2M  0.518159 0.518451 0.518536 
3M  0.518700 0.518800 0.518600 
4M  0.519120 0.519113 0.518865 
5M  0.519490 0.519418 0.519160 
6M  0.519700 0.519600 0.519300 
9M  0.519511 0.519377 0.519024 
1Y  0.519800 0.519700 0.519300 
18M  0.521228 0.521406 0.520882 
2Y  0.523097 0.523405 0.522800 
3Y  0.525054 0.525254 0.524647 
4Y  0.527055 0.527151 0.526752 
5Y  0.529054 0.529256 0.528957 
6Y  0.531099 0.531543 0.531065 
7Y  0.532852 0.533457 0.532856 
8Y  0.534207 0.534802 0.534325 
9Y  0.535314 0.535847 0.535558 
+0

정확히 무엇 환호는 짝! – CDMP