2016-12-02 79 views
1

周的行我有一個熊貓的時間序列:樞軸每日時間序列的大熊貓

days = pd.DatetimeIndex([ 
        '2011-01-01T00:00:00.000000000', 
        '2011-01-02T00:00:00.000000000', 
        '2011-01-03T00:00:00.000000000', 
        '2011-01-04T00:00:00.000000000', 
        '2011-01-05T00:00:00.000000000', 
        '2011-01-06T00:00:00.000000000', 
        '2011-01-07T00:00:00.000000000', 
        '2011-01-08T00:00:00.000000000', 
        '2011-01-09T00:00:00.000000000', 
        '2011-01-11T00:00:00.000000000', 
        '2011-01-12T00:00:00.000000000', 
        '2011-01-13T00:00:00.000000000', 
        '2011-01-14T00:00:00.000000000', 
        '2011-01-16T00:00:00.000000000', 
        '2011-01-18T00:00:00.000000000', 
        '2011-01-19T00:00:00.000000000', 
        '2011-01-21T00:00:00.000000000', 
        ]) 
counts = [85, 97, 24, 64, 3, 37, 73, 86, 87, 82, 75, 84, 43, 51, 42, 3, 70] 
df = pd.DataFrame(counts, 
        index=days, 
        columns=['count'], 
       ) 
df['day of the week'] = df.index.dayofweek 

它看起來是這樣的:

  count day of the week 
2011-01-01 85  5 
2011-01-02 97  6 
2011-01-03 24  0 
2011-01-04 64  1 
2011-01-05 3  2 
2011-01-06 37  3 
2011-01-07 73  4 
2011-01-08 86  5 
2011-01-09 87  6 
2011-01-11 82  1 
2011-01-12 75  2 
2011-01-13 84  3 
2011-01-14 43  4 
2011-01-16 51  6 
2011-01-18 42  1 
2011-01-19 3  2 
2011-01-21 70  4 

注意,有一些日子,缺少這應該充滿零。我想將其轉換爲看起來像日曆,以便行數增加數週,列數是一週中的幾天,而值是該特定日期的計數。所以,最終的結果應該是這樣的:

0 1 2 3 4 5 6 
0 0 0 0 0 0 85 97 
1 24 64 3 37 73 86 87 
2 0 82 75 84 0 0 51 
3 0 42 3 0 70 0 0 

回答

1
# create weeks number based on day of the week 
df['weeks'] = (df['day of the week'].diff() < 0).cumsum() 

# pivot the table 
df.pivot('weeks', 'day of the week', 'count').fillna(0) 

enter image description here

+0

0周前五天(0-4)有一個零計數。有沒有辦法改變一切,所以第六天是第一天?如果我將這個DF轉換爲一個numpy數組,然後將其平坦化,那麼它將在開始和結束處填充零,但我希望它的長度與原始DF中的行數相同。我打算將一些轉換應用於此透視表。 – slaw

+0

您可以隨時通過傳遞列名來重新排列列。 'new_df [[6,0,1,2,3,4,5]]將把第七列作爲第一列。你是這個意思嗎? – Psidom