栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

dataframe 模仿sql实现窗口函数功能 lead lag dataframe groupy 实现窗口函数

dataframe 模仿sql实现窗口函数功能 lead lag dataframe groupy 实现窗口函数

df:Dataframe,每个工单的操作日志表。列:工单号, 操作时间,操作行为代码

我想找出有哪些工单进行了操作1之后紧接着就是进行操作5

如果是在sql中,直接用lead窗口函数就行。
但是在dataframe中,需要结合groupby和sort_values、shift来实现。

# 1. 按工单和操作时间排序
df.sort_values(['工单号','操作时间'], inplace=True)

# 2. 给予每行操作一个唯一的主键
df['id'] = range(len(df))

# 3. 实现窗口函数:对order_id聚合,按照操作时间排序,然后移动窗口
a = df.grupby('order_id').apply(lambda x: x.sort_values('操作时间').shift(-1))

# 4. 得到字典 id:操作行为代码
a.index = a.id-1         # 将a的索引设为主键id,这样字典的主键就是id。id-1:因为经过shift,需要匹配上一行的行为就是id-1
dic = a['操作行为代码'].dropna().to_dict()

# 5. 通过字典获取下一个操作行为代码
df['下一个操作行为代码'] = df['id].map(dict)

# 6. 找出有哪些工单进行了操作1之后紧接着就是进行操作5
df[(df['操作行为代码']==1)&(df['操作行为代码']==5)]

本方法并不严格,第二个工单的首行会匹配到第一个末行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/700036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号