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

如何将用药疗程数据转换为0-1序列的纵向数据?

疗程数据转纵向0-1序列的实现方法

下面提供两种常用数据处理工具的实现方案,直接基于你的疗程规则生成目标序列:

Python 实现

基础序列生成

如果仅需要生成单个患者的0-1状态序列,可直接用列表推导式快速展开:

# 定义疗程:(持续天数, 用药状态1/0)
treatment_cycles = [(150, 1), (1, 0), (60, 1), (2, 0)]
# 生成每日状态序列
daily_status = [status for days, status in treatment_cycles for _ in range(days)]

daily_status 即为包含150个1、1个0、60个1、2个0的列表。

Pandas 批量处理数据集

若你的数据是多患者的结构化表格(每个疗程占一行),可通过重复行实现纵向展开:

import pandas as pd

# 示例数据集
df = pd.DataFrame({
    '患者ID': [1, 1, 1, 1],
    '天数': [150, 1, 60, 2],
    '状态': [1, 0, 1, 0]
})

# 按疗程天数重复每行
df_expanded = df.loc[df.index.repeat(df['天数'])]
# 重置索引并添加日序号(可选)
df_expanded = df_expanded.reset_index(drop=True)
df_expanded['日序号'] = df_expanded.groupby('患者ID').cumcount() + 1

处理后df_expanded的每行对应一位患者一天的用药状态。

R 实现

基础序列生成

利用rep()函数直接按次数重复状态值:

# 定义状态向量和对应持续天数
status_vec <- c(1, 0, 1, 0)
days_vec <- c(150, 1, 60, 2)
# 生成每日状态序列
daily_status <- rep(status_vec, times = days_vec)

Tidyverse 批量处理数据集

针对多患者的表格数据,用uncount()函数展开疗程:

library(tidyverse)

# 示例数据集
df <- tibble(
  患者ID = c(1, 1, 1, 1),
  天数 = c(150, 1, 60, 2),
  状态 = c(1, 0, 1, 0)
)

# 按天数展开行并添加日序号(可选)
df_expanded <- df %>%
  uncount(天数) %>%
  mutate(日序号 = row_number(), .by = 患者ID)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:35:21