怎么才能高效地将长话单拆分成按小时分解的多条短话单?

2021-08-12 10:51:07 +08:00
 nemo95

原始话单是这样的:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 23:56:27 1 精灵宝可梦

老板让分析每个用户各个时段都在看啥,所以我想吧话单拆分成这样:

USERID STARTTIME ENDTIME SERVICETYPE CHANNELCODE PROGRAMNAME PERIODTIME
xxxxxxxxxxxxxxxxx1 2021-05-24 19:52:28 2021-05-24 20:00:00 1 精灵宝可梦 2021-05-24 19:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 20:00:00 2021-05-24 21:00:00 1 精灵宝可梦 2021-05-24 20:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 21:00:00 2021-05-24 22:00:00 1 精灵宝可梦 2021-05-24 21:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 22:00:00 2021-05-24 23:00:00 1 精灵宝可梦 2021-05-24 22:00:00
xxxxxxxxxxxxxxxxx1 2021-05-24 23:00:00 2021-05-24 23:56:27 1 精灵宝可梦 2021-05-24 23:00:00

目前的方法是根据起止时间生成时间序列,然后 for 循环生成新的行,再拼接成一个新的 dataframe

# split_data
...
for i in range(0, len_date-1):
    df_y['Period'] = date_rng[i]
    df_y['EndTime'] = date_rng[i+1]
    df_y['StartHour'] = date_rng[i]
    df_y['EndHour'] = date_rng[i+1]
    df_x = df_x.append(df_y)
...

主函数还要写个 for 循环遍历整个话单

for i in range(len(df_tmp)):
    df_x = split_data(df_tmp.iloc[i])
    df_t = df_t.append(df_x)
df_t

这样能获得想要的结果,但话单太多了,跑起来没完没了……

有没有更好的方法能提高下效率?

1162 次点击
所在节点    Python
2 条回复
swulling
2021-08-12 10:54:17 +08:00
把话单拆分,多进程跑,不够就多加机器
princelai
2021-08-12 16:19:12 +08:00
有办法,https://paste.ubuntu.com/p/Df6JCbsPn6/

代码:


结果:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX