You need to enable JavaScript to run this app. pandas DataFrame 如何根据动作列值计算资产安装时长(timedelta)?
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame 如何根据动作列值计算资产安装时长(timedelta)?

资产安装持续时长计算实现方案

方案逻辑说明

使用pd.crosstab生成层级索引的处理路径,后续折叠、配对安装/移除日期的冗余成本很高,更高效的实现方式是直接将动作类型展开为独立列,完成安装、移除日期的逐组配对后直接计算时间差。

分步实现代码

  • 基础格式校正
    原始数据中Date列为字符串格式,无法直接执行时间差计算,首先完成格式转换:
    import pandas as pd
    df = pd.DataFrame({
        'Date': ['2007-11-01','2012-03-02','2012-03-02','2013-04-01','2013-04-01','2017-11-15','2017-11-15'], 
        'action':['installed','installed','removed','installed','removed','installed','removed'], 
        'asset_alphnum':['A-3724','A-3534','A-3724','A2732','A-3534','A-2007','A2732']
    })
    # 将字符串日期转为pandas datetime类型
    df['Date'] = pd.to_datetime(df['Date'])
    
  • 结构化展开事件列
    相比生成嵌套的层级交叉表,直接通过pivot_table将action作为独立列展开,可得到无复杂嵌套结构的规整表格,省去后续折叠层级索引的操作:
    event_df = df.pivot_table(
        index='asset_alphnum',
        columns='action',
        values='Date',
        aggfunc='first'
    ).reset_index()
    
    展开后的表格列包含资产编号、安装日期、移除日期,可直接用于计算。
  • 计算持续安装时长
    用移除日期减去对应安装日期,得到timedelta类型的时长,可按需提取天数值:
    # 计算时间差并转为自然天数值
    event_df['installed_duration_days'] = (event_df['removed'] - event_df['installed']).dt.days
    

边界场景处理:对于仅留存安装记录、无对应移除记录的资产(如示例数据中的A-2007),计算得到的时长为缺失值,可根据业务规则补充处理逻辑,比如计算安装日到当前日期的时长、标记为“处于安装状态”等。

原crosstab路径的补充操作指引

如果已经生成了带层级索引的crosstab结果,后续折叠、配对的操作逻辑为:

  1. 拆解多层列索引,拆分出独立的日期值、动作类型字段
  2. 以每一行的资产为单位,将不同时间点的installed、removed事件按时间先后顺序配对
  3. 逐对计算日期差,汇总得到单资产的总安装时长
    该路径的计算冗余更高,在单资产多次安装、移除的复杂场景下,更容易出现配对错位的问题。

内容的提问来源于stack exchange,提问作者Prolle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 07:24:06