2017-07-25 48 views
1

我有一个事件列表,我想在图表上显示每周每小时每小时发生多少次,如下所示: Example of the graph i want (每一行是一天,x轴是一天中的时间,y轴是事件的数量)如何将事件列表中的矩阵显示在Panda中

由于我是熊猫新手,我不确定最好的方法是什么,但这是我的方式:

x = [(rts[k].getDay(), rts[k].getHour(), 1) for k in rts] 
df = pd.DataFrame(x[:30]) # Subset of 30 events 
dfGrouped = df.groupby([0, 1]).sum() # Group them by day and hour 

#Format to display  
pd.DataFrame(np.random.randn(24, 7), index=range(0,24), columns=['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']) 

问题是,我怎么能从我的数据框与数据分组到矩阵24x7按要求显示?

我试着as_matrix,但只给了我一维数组,而我想我的数据框的索引是我的矩阵中的索引。

print(df) 
     2 
0 1  
0 19 1 
    23 1 
1 10 2 
    18 3 
    22 1 
2 17 1 
3 8 2 
    9 3 
    11 3 
    13 1 
    19 1 
4 7 1 
    9 1 
    14 1 
    15 1 
    18 1 
5 1 2 
    7 1 
    13 1 
    19 1 
6 12 1 

感谢您的帮助:) 安东尼

回答

0

我认为你需要unstack为重塑数据,然后rename列名由dict并在必要时添加缺少的小时指数reindex_axis

df1 = df.groupby([0, 1])[2].sum().unstack(0, fill_value=0) 

#set columns names 
df = pd.DataFrame(x[:30], columns = ['days','hours','val']) 
d = {0: 'Mo', 1: 'Tu', 2: 'We', 3: 'Th', 4: 'Fr', 5: 'Sa', 6: 'Su'} 
df1 = df.groupby(['days', 'hours'])['val'].sum().unstack(0, fill_value=0) 
df1 = df1.rename(columns=d).reindex_axis(range(24), fill_value=0) 
print (df1) 
days Mo Tu We Th Fr Sa Su 
hours        
0  0 0 0 0 0 0 0 
1  0 0 0 0 0 2 0 
2  0 0 0 0 0 0 0 
3  0 0 0 0 0 0 0 
4  0 0 0 0 0 0 0 
5  0 0 0 0 0 0 0 
6  0 0 0 0 0 0 0 
7  0 0 0 0 1 1 0 
8  0 0 0 2 0 0 0 
9  0 0 0 3 1 0 0 
10  0 2 0 0 0 0 0 
11  0 0 0 3 0 0 0 
12  0 0 0 0 0 0 1 
13  0 0 0 1 0 1 0 
14  0 0 0 0 1 0 0 
15  0 0 0 0 1 0 0 
16  0 0 0 0 0 0 0 
17  0 0 1 0 0 0 0 
18  0 3 0 0 1 0 0 
19  1 0 0 1 0 1 0 
20  0 0 0 0 0 0 0 
21  0 0 0 0 0 0 0 
22  0 1 0 0 0 0 0 
23  1 0 0 0 0 0 0 
+0

谢谢你这么多,这正是我需要:) – Antoine