我的用户拨号模式数据如下:
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 :(得分: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