如何为DataFrame特定行号范围添加event列并赋值?
给大型DataFrame批量添加指定行范围的event列
R 实现方案
基础R方法(快速直接)
先初始化event列为NA(或0),再通过行号索引直接赋值:
# 单个DataFrame操作 df$event <- NA # 初始化为NA,需设为0则改为0 df[19:53, "event"] <- 1 # 19-53行(1-based)赋值为1 df[65:92, "event"] <- 2 # 65-92行赋值为2 # 多个DataFrame批量处理(假设DF存储在列表dfs中) dfs <- lapply(dfs, function(x) { x$event <- NA x[19:53, "event"] <- 1 x[65:92, "event"] <- 2 x })
dplyr 方法(tidy风格,多场景友好)
用row_number()结合case_when,适合后续扩展更多事件范围:
library(dplyr) # 单个DF操作 df <- df %>% mutate( event = case_when( row_number() %in% 19:53 ~ 1, row_number() %in% 65:92 ~ 2, TRUE ~ NA_real_ # 其他行设为NA,改为0则写0 ) ) # 多个DF批量处理 dfs <- lapply(dfs, function(x) { x %>% mutate( event = case_when( row_number() %in% 19:53 ~ 1, row_number() %in% 65:92 ~ 2, TRUE ~ NA_real_ ) ) })
Python Pandas 实现方案
注意:Pandas的行索引默认是0-based,所以你提到的19行对应代码里的18,53行对应52,以此类推。
基础索引方法
import pandas as pd import numpy as np # 单个DataFrame操作 df['event'] = np.nan # 初始化为NA,需设为0则写0 df.loc[18:52, 'event'] = 1 # 对应原19-53行 df.loc[64:91, 'event'] = 2 # 对应原65-92行 # 多个DF批量处理(假设DF存储在列表dfs中) def add_event_col(df): df['event'] = np.nan df.loc[18:52, 'event'] = 1 df.loc[64:91, 'event'] = 2 return df dfs = [add_event_col(df) for df in dfs]
np.select 方法(多条件场景更清晰)
适合后续要添加更多事件范围的情况:
import pandas as pd import numpy as np # 单个DF操作 conditions = [ df.index.isin(range(18, 53)), # 对应原19-53行 df.index.isin(range(64, 92)) # 对应原65-92行 ] choices = [1, 2] df['event'] = np.select(conditions, choices, default=np.nan) # 多个DF批量处理 def add_event_col(df): conditions = [ df.index.isin(range(18, 53)), df.index.isin(range(64, 92)) ] choices = [1, 2] df['event'] = np.select(conditions, choices, default=np.nan) return df dfs = [add_event_col(df) for df in dfs]
内容的提问来源于stack exchange,提问作者Kingpin96
相关产品推荐
相关产品推荐

