2016-12-02 77 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