何在python中将pd数据帧转换为矩阵结构

时间:2015-10-30 05:01:25

标签: python python-2.7 pandas

我的用户拨号模式数据如下:

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

1 个答案:

答案 0 :(得分: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