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

Pandas按ID和Week两列分组 提取CloseContact前两个非空值生成新列

实现思路

  • 按ID、Week两个字段对DataFrame执行分组操作
  • 对每个分组内的CloseContact列做去空值处理,得到当前分组的有效接触记录序列
  • 取有效序列的第一个值作为当前分组所有行的CC1值,取有效序列的第二个值作为当前分组所有行的CC2值,若对应位置无有效记录则填充空值
  • 通过分组广播特性将两个字段的取值填充到当前分组的所有对应行中

实现代码

import pandas as pd
import numpy as np

NaN = np.nan
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':[NaN,'Pos',NaN,'Neg',NaN,NaN,NaN,NaN,'Pos', NaN, 
              NaN,NaN,'Negative',NaN,NaN,NaN,'Positive'],
    'CloseContact': [NaN, 'True', NaN, NaN, 'False',NaN, NaN, 'False', 'True', 
                    NaN, NaN, 'False', NaN, 'True','True','False', NaN ]}
    
df1 = pd.DataFrame(data)

# 按ID+Week分组
grouped = df1.groupby(['ID', 'Week'])['CloseContact']

# 生成CC1、CC2列
df1['CC1'] = grouped.transform(lambda x: x.dropna().iloc[0] if len(x.dropna()) >= 1 else pd.NA)
df1['CC2'] = grouped.transform(lambda x: x.dropna().iloc[1] if len(x.dropna()) >= 2 else pd.NA)

print(df1)

内容的提问来源于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 08:45:04