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

Pandas按分组条件计算每周依从性并填充至对应列首行实现

实现代码

你可以按以下步骤实现需求:先统计每个ID对应周的有效检测数,计算依从性后匹配到每个ID的首行对应列即可,完整代码如下:

import pandas as pd

data = {'ID':['A','A','A','A','A','A','A','A','A','C','C','C','C','C','C','C','C'],
    'Week': ['Week1','Week1','Week1','Week1','Week2','Week2','Week2','Week2','Week3',
             'Week1','Week1','Week1','Week1','Week2','Week2','Week2','Week2'],
    'Risk':['High','','','','','','','','','High','','','','','','',''],
    'Testing':['','Pos','','Neg','','','','','Pos', '', '','','Neg','','','','Pos'],
    'Week1_adher':['','','','','','','','','', '','','','','','','',''],
    'Week2_adher':['','','','','','','','','','','','','','','','',''],
    'Week3_adher':['','','','','','','','','','','','','','','','','']}
    
df1 = pd.DataFrame(data)

# 步骤1:计算每个ID每周的依从性
# 标记有效检测记录(非空)
df1['valid_test'] = df1['Testing'].ne('')
# 分组统计每周有效检测数,判断依从性
weekly_adher = df1.groupby(['ID','Week'])['valid_test'].sum().reset_index()
weekly_adher['adher_res'] = weekly_adher['valid_test'].ge(2).map({True:'Yes', False:'No'})
# 转成宽表匹配WeekX_adher列名
adher_wide = weekly_adher.pivot(index='ID', columns='Week', values='adher_res').add_suffix('_adher')

# 步骤2:获取每个ID的首行索引,填充结果
first_idx = df1.groupby('ID').head(1).index
df1.loc[first_idx, adher_wide.columns] = adher_wide.loc[df1.loc[first_idx, 'ID']].values

# 删掉辅助列
df1.drop('valid_test', axis=1, inplace=True)

print(df1)

结果验证

运行后即可得到符合要求的DataFrame:

  • ID为A的首行:Week1_adher为Yes、Week2_adher为No、Week3_adher为No
  • ID为C的首行:Week1_adher为No、Week2_adher为No、Week3_adher为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:04