You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将cohort队列数据分解转换为所需的时间序列格式?

解决方法

直接使用pandas自带的宽表转长表函数melt即可完成需求,无需手动编写循环,代码简洁且效率更高:

核心思路

  • 将存储偏移天数的列(0-5)从列名转换为单独的偏移天数字段
  • 计算实际日期 = 队列起始日期 + 偏移天数
  • 最后保留所需的两个字段即可

示例代码

import pandas as pd

# 第一步:宽表转长表
long_df = df.melt(
    id_vars="Cohort Day",  # 保留队列起始日期列作为标识列
    var_name="offset_day", # 原列名(0-5)转为偏移天数字段
    value_name="value"     # 原单元格值转为数值字段
)

# 第二步:转换偏移天数为整数,计算实际日期
long_df["offset_day"] = long_df["offset_day"].astype(int)
long_df["actual_date"] = long_df["Cohort Day"] + pd.to_timedelta(long_df["offset_day"], unit="d")

# 第三步:提取所需两列得到最终结果
result = long_df[["actual_date", "value"]]

原有代码的错误原因

  • 初始化的test是空DataFrame,遍历itertuples()时没有可迭代的行对象,循环内的代码完全不会执行,自然test一直为空
  • test[0:5, 0]这类索引写法不符合pandas的基础语法,pandas默认会将(0:5, 0)识别为元组类型的列名,而非你预期的「行切片+按位置取列」赋值
  • apply内的逻辑存在语法错误,lambda返回的是生成器对象,无法得到正确的偏移天数数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:36:03