2014-06-09 1 views
0

현재 일별 항목으로 인덱싱 된 데이터의 다음 열을 병합하려고합니다 (단, 주당 한 번만 포인트가 있음). 저는 칼럼을 연도 변수로 분리했습니다. 그러나 결합 된 데이터 프레임으로 가져오고 날짜 인덱스를 무시하는 데 어려움을 겪고 있으므로 지난 몇 년 동안 주당 최대/최소 열을 구축 할 수 있습니다. 이 작업을 수행하는 방법을 병합/조인하는 방법을 잘 모르겠습니다.임의의 인덱스를 사용하여 새 DataFrame을 생성하는 시계열 변수 병합과 관련된 문제

def minmaxdata(): 
    Totrigs = dataforgraphs() 
    tr = Totrigs 
    yrs=[tr['2007'],tr['2008'],tr['2009'],tr['2010'],tr['2011'],tr['2012'],tr['2013'],tr['2014']] 
    yrlist = ['tr07','tr08','tr09','tr10','tr11','tr12','tr13','tr14'] 
    dic = dict(zip(yrlist,yrs)) 
    yr07,yr08,yr09,yr10,yr11,yr12,yr13,yr14 =dic['tr07'],dic['tr08'],dic['tr09'],dic['tr10'],dic['tr11'],dic['tr12'],dic['tr13'],dic['tr14'] 


    minmax = yr07.append([yr08,yr09,yr10,yr11,yr12,yr13,yr14],ignore_index=True) 

I would like a Dataframe like the following: 

    2007 2008 2009 2010 2011 2012 2013 2014 min max 

1 10 13 10 12 34 23 22 14 10 34 
2 25 ... 
3 22 
4 ... 
5 
. 
. 
. ... 
52 

답변

0

내가 원래 데이터가 어떻게 생겼는지 모르겠어요,하지만 난 생각하지 않는다 :

# 만들기 연도 변수는

나는 다음과 같은 한 새로운 인덱스 새로운 dataframe에 추가 모든 연도를 하드 코딩하는 것이 좋습니다. 재사용 성을 잃어 버렸습니다. 나는 날짜별로 인덱싱 된 임의의 정수 시퀀스를 매주 한 날짜로 설정합니다.

In [65]: idx = pd.date_range ('2007-1-1','2014-12-31',freq='W') 

In [66]: df = pd.DataFrame(np.random.randint(100, size=len(idx)), index=idx, columns=['value']) 

In [67]: df.head() 
Out[67]: 
      value 
2007-01-07  7 
2007-01-14  2 
2007-01-21  85 
2007-01-28  55 
2007-02-04  36 

In [68]: df.tail() 
Out[68]: 
      value 
2014-11-30  76 
2014-12-07  34 
2014-12-14  43 
2014-12-21  26 
2014-12-28  17 

그런 다음 주 year 수 :

In [69]: df['year'] = df.index.year 

In [70]: df['week'] = df.groupby('year').cumcount()+1 

(당신은 주 번호 df.index.week을 시도 할 수 있습니다를하지만 1 월에 주 53 번부터 같은 이상한 행동을 본 적이)

마지막으로 피벗 테이블을 변환하여 행 단위로 만듭니다. max/min :

In [71]: df2 = df.pivot_table(index='week', columns='year', values='value') 

In [72]: df2['max'] = df2.max(axis=1) 

In [73]: df2['min'] = df2.min(axis=1) 

그리고 지금 우리의 dataframe df2은 다음과 같습니다 당신이 필요로해야한다 :

In [74]: df2 
Out[74]: 
year 2007 2008 2009 2010 2011 2012 2013 2014 max min 
week               
1  7 82 13 32 24 58 18 10 82 7 
2  2  5 29  0  2 97 59 83 97 0 
3  85 89  8 83 63 73 47 49 89 8 
4  55  5  1 44 78 10 13 87 87 1 
5  36 41 48 98 98 24 24 69 98 24 
6  51 43 62 60 44 57 34 33 62 33 
7  37 66 72 46 28 11 73 36 73 11 
8  30 13 86 93 46 67 95 15 95 13 
9  78 84 16 21 70 39 43 90 90 16 
10  9  2 88 15 39 81 44 96 96 2 
11  34 76 16 44 44 26 30 77 77 16 
12  2 24 23 13 25 69 25 74 74 2 
13  66 91 67 77 18 47 95 66 95 18 
14  59 52 22 42 40 99 88 21 99 21 
15  76 17 31 57 43 31 91 67 91 17 
16  76 38 53 43 84 45 78  9 84 9 
17  88 53 34 22 99 93 61 42 99 22 
18  78 19 82 19  5 80 55 69 82 5 
19  54 92 56  6  2 85  7 67 92 2 
20  8 56 86 41 60 76 31 81 86 8 
21  64 76 11 38 41 98 39 72 98 11 
22  21 86 34  1 15 27 26 95 95 1 
23  82 90  3 17 62 18 93 20 93 3 
24  47 42 32 27 83  8 22 14 83 8 
25  15 66 70 16  4 22 26 14 70 4 
26  12 68 21  7 86  2 27 10 86 2 
27  85 85  9 39 17 94 67 42 94 9 
28  73 80 96 49 46 23 69 84 96 23 
29  57 74  6 71 79 31 79  7 79 6 
30  18 84 85 34 71 69  0 62 85 0 
31  24 40 93 53 72 46 44 71 93 24 
32  95  4 58 57 68 27 95 71 95 4 
33  65 84 87 41 38 45 71 33 87 33 
34  62 14 41 83 79 63 44 13 83 13 
35  49 96 50 62 25 45 69 63 96 25 
36  6 38 86 34 98 60 67 80 98 6 
37  99 44 26 19 19 20 57 17 99 17 
38  2 40  7 65 68 58 68 13 68 2 
39  72 31 83 65 69 39 10 76 83 10 
40  90 31 42 20  7  8 62 79 90 7 
41  10 46 82 96 30 43 12 84 96 10 
42  79 38 28 78 25  9 80  2 80 2 
43  64 83 63 40 29 86 10 15 86 10 
44  89 91 62 48 53 69 16  0 91 0 
45  99 26 85 45 26 53 79 86 99 26 
46  35 14 46 25 74  6 68 44 74 6 
47  17  9 84 88 29 83 85  1 88 1 
48  18 69 55 16 77 35 16 76 77 16 
49  60  4 36 50 81 28 50 34 81 4 
50  36 29 38 28 81 86 71 43 86 28 
51  41 82 95 27 95 77 74 26 95 26 
52  2 81 89 82 28  2 11 17 89 2 
53  NaN NaN NaN NaN NaN  0 NaN NaN 0 0 

편집 : 당신이 특정 컬럼을 통해 max/min이 필요하면 그냥 나열 . 이 경우 (2007-2013), 그들은 연속적이므로 다음을 할 수 있습니다. 그렇지 않으면

df2['max_2007to2013'] = df2[range(2007,2014)].max(axis=1) 

, 단순히 좋아하는 목록 : df2[[2007,2010,2012,2013]].max(axis=1)

+0

당신을 감사합니다! 나는 내가 만든 실수를 깨닫고 그것을 얻었다. 마지막 후속 질문으로 min/max 열이 min/max에 포함 된 연도를 설정하는 것이 가능합니까? 제 경우에는 2014 년이 아닌 2007-2013 년을 포함하고 싶습니다. – carevans88

+0

정말 고맙습니다. 위의 질문을 볼 수 있다면이 마지막 부분을 끝내는 데 정말로 도움이 될 것입니다. 몇 년 동안 최소/최대를 어떻게 인덱스하는지 궁금합니다. – carevans88

+0

위의 편집을 참조하십시오. – Happy001

관련 문제