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)]

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值