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

扩展DataFrame生成嵌套分组玩具数据集:按条件新增个体观测

我来帮你搞定这个玩具数据集的扩展任务!下面是用Python pandas实现的完整方案,完全贴合你的需求:

实现思路
  • 针对每个个体,根据baseline字段的值生成对应数量的基线观测记录,日期从baselineStart往前递推(比如baseline=4时,包含baselineStart当天及之前3天,共4条记录)
  • 根据postBaseline字段的值生成基线后观测记录,最多生成20条,日期从baselineStart次日开始递推
  • 每条观测记录都保留个体、组的关联信息,并标记观测类型(baseline/postBaseline)
完整代码实现
import pandas as pd
from datetime import timedelta

# 初始化你提供的数据集(补全了第11条的postBaseline值)
initial_data = pd.DataFrame({
    'person': [1,2,3,4,5,6,7,8,9,10,11],
    'group': [1,1,1,1,2,2,2,2,3,3,3],
    'baseline': [4,6,4,6,4,6,4,6,4,6,4],
    'baselineStart': pd.to_datetime(['2018-06-04']*4 + ['2018-07-02']*4 + ['2018-07-30']*3),
    'postBaseline': [20]*11
})

def expand_individual(row):
    # 生成基线观测记录:从baselineStart往前推,生成baseline条日期
    baseline_dates = [row['baselineStart'] - timedelta(days=i) for i in range(row['baseline']-1, -1, -1)]
    baseline_records = pd.DataFrame({
        'person': row['person'],
        'group': row['group'],
        'observation_date': baseline_dates,
        'observation_type': 'baseline'
    })
    
    # 生成基线后观测记录:最多20条,从baselineStart次日开始
    max_post = min(row['postBaseline'], 20)
    post_dates = [row['baselineStart'] + timedelta(days=i+1) for i in range(max_post)]
    post_records = pd.DataFrame({
        'person': row['person'],
        'group': row['group'],
        'observation_date': post_dates,
        'observation_type': 'postBaseline'
    })
    
    # 合并当前个体的所有观测记录
    return pd.concat([baseline_records, post_records], ignore_index=True)

# 应用函数扩展所有个体的记录
expanded_data = pd.concat([expand_individual(row) for _, row in initial_data.iterrows()], ignore_index=True)

# 查看扩展后的数据集示例(以第一个个体为例)
print(expanded_data[expanded_data['person'] == 1].head(10))
代码关键点说明
  • 日期生成逻辑:基线观测从baselineStart往前数,确保包含当天;基线后观测从次日开始,严格控制最多20条
  • 嵌套结构保留:每条记录都绑定了对应的person和group字段,完美维持个体嵌套于组内的关系
  • 灵活性:如果后续postBaseline字段出现小于20的值,代码会自动适配生成对应数量的记录
输出示例(第一个个体的前10条记录)
person  group observation_date observation_type
0       1      1       2018-06-01         baseline
1       1      1       2018-06-02         baseline
2       1      1       2018-06-03         baseline
3       1      1       2018-06-04         baseline
4       1      1       2018-06-05      postBaseline
5       1      1       2018-06-06      postBaseline
6       1      1       2018-06-07      postBaseline
7       1      1       2018-06-08      postBaseline
8       1      1       2018-06-09      postBaseline
9       1      1       2018-06-10      postBaseline

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:32:12