2015-10-30 91 views
2

我有我的用户的拨号模式数据如下:何给PD的数据帧转换为矩阵结构在python

 
user No.  call_Frequency  Hour_of_call 
P1 1212  3      2 
P1 1212  5      3 
P1 1111  3      4 
P1 3456  2      5 

通话的时光是在什么时候没有。已被称为和call_Frequency是多少次没有。拨打那个小时。

我已生成我的输出如下:

  Hour 
No. **2 3 4  5** 
1212 3 5 0  0 
1111 0 0 3  0 
3456 0 0 0  13 

但我想输出24小时一天。我正在寻找的输出应该具有的所有24个小时,因为头和对应的应该有一个小时值0那里是没有呼叫:

 
     Hour 
No. 1 2 3 4  5....... 24 
1212 0 3 5 0  0.....  0 
1111 0 0 0 3  0.....  0 
3456 0 0 0 0  13.....  0 
+0

@akrun你能在此帮助 – Lucy

回答

2

与此数据帧开始:

Hour_of_call No. call_Frequency user 
0    2 1212    3 P1 
1    3 1212    5 P1 
2    4 1111    3 P1 
3    5 3456    2 P1 

集团通过数量:

grouped = df.groupby('No.') 

编写提出了零丢失调用一个函数:

def func(t): 
    hours = set(t['Hour_of_call'].values) 
    calls = iter(t['call_Frequency'].values) 
    return pd.Series([0 if x not in hours else next(calls) 
      for x in range(1, 25)]) 

应用此功能:

res = grouped.apply(func) 

充分利用小时开始1而不是0

res.columns = range(1, 25) 

结果res应该是这样的:

 1 2 3 4 5 6 7 8 9 10 ... 23 24 
No.                   
1111 0 0 0 3 0 0 0 0 0 0 ... 0 0 
1212 0 3 5 0 0 0 0 0 0 0 ... 0 0 
3456 0 0 0 0 2 0 0 0 0 0 ... 0 0