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

基于多条件为重复ID数据集添加Flag1与Flag2列的技术求助

为重复ID的时间周期数据集新增Flag1和Flag2列

原始数据集

ID     Start_date      End_date    Hospital  Work             
 00001   01JAN2015      15JAN2015      006      w   
 00001   16JAN2015      16JAN2015      006      p                       
 00001   17JAN2015      20JAN2015      006      w       
 00001   21JAN2015      29JAN2015      006      f                     
 00001   30JAN2015      02FEB2015      004      w         
 00001   03FEB2015      03FEB2015      004      s            
 00001   04FEB2015      08FEB2015      004      w       
 00001   09FEB2015      13FEB2015      004      f        
 00001   14FEB2015      16FEB2015      006      f 
 00001   17FEB2015      28DEC2016      006      w       
 00001   29DEC2016      31DEC2016      006      w 
 ....      .....         ......        ...     ...

期望输出数据集

ID     Start_date      End_date    Hospital  Work  Flag1   Flag2                  
 00001   01JAN2015      15JAN2015      006      w      1       4    
 00001   16JAN2015      16JAN2015      006      p      4       9                      
 00001   17JAN2015      20JAN2015      006      w      9       4     
 00001   21JAN2015      29JAN2015      006      f      4       9                  
 00001   30JAN2015      02FEB2015      004      w      9       2    
 00001   03FEB2015      03FEB2015      004      s      2       9         
 00001   04FEB2015      08FEB2015      004      w      9       4     
 00001   09FEB2015      13FEB2015      004      f      4       9      
 00001   14FEB2015      16FEB2015      006      f      9       2      
 00001   17FEB2015      28DEC2016      006      w      2       4
 00001   29DEC2016      31DEC2016      006      w      4      Stop
 ....      .....         ......        ...     ...            

规则说明

  • 每个ID的第一行数据,Flag1固定为1;
  • Flag2取值规则(优先级从高到低):
    • ID的最后一行填Stop;
    • 当前行Hospital与下一行不同时,填2;
    • Work字段为"w"时填4,非"w"(如f、s等)时填9;
  • 除第一行外,Flag1取上一行的Flag2值。

实现方案(Python pandas)

针对350个重复ID的数据集,用pandas分组处理即可实现,代码如下:

import pandas as pd

# 读取原始数据(若从文件读取可替换为pd.read_csv/pd.read_excel等方法)
# df = pd.read_csv('your_dataset.csv')

# 关键步骤:按ID和Start_date排序,保证每个ID下的时间顺序正确
df = df.sort_values(by=['ID', 'Start_date']).reset_index(drop=True)

# 定义分组处理函数
def process_id_group(group):
    row_count = len(group)
    # 初始化Flag列
    group['Flag1'] = None
    group['Flag2'] = None
    
    # 设置第一行Flag1
    group.iloc[0, group.columns.get_loc('Flag1')] = 1
    
    for i in range(row_count):
        # 处理Flag2
        if i == row_count - 1:
            group.iloc[i, group.columns.get_loc('Flag2')] = 'Stop'
        else:
            # 检查Hospital是否变更
            current_hosp = group.iloc[i]['Hospital']
            next_hosp = group.iloc[i+1]['Hospital']
            if current_hosp != next_hosp:
                group.iloc[i, group.columns.get_loc('Flag2')] = 2
            else:
                # 根据Work字段赋值
                group.iloc[i, group.columns.get_loc('Flag2')] = 4 if group.iloc[i]['Work'] == 'w' else 9
        
        # 处理非第一行的Flag1
        if i > 0:
            group.iloc[i, group.columns.get_loc('Flag1')] = group.iloc[i-1]['Flag2']
    
    return group

# 按ID分组处理所有数据
result_df = df.groupby('ID').apply(process_id_group).reset_index(drop=True)

# 输出结果
print(result_df)

代码说明

  1. 排序是核心前提,确保每个ID下的记录按时间顺序排列;
  2. 分组后逐行处理每个ID的子数据集,严格遵循规则赋值;
  3. 用iloc定位行列,避免索引混乱,保证处理准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:01:05