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

如何按条件创建新变量New_Var:全Test变量为0时值为2,否则为0

问题描述

现有数据集如下:

Test1    Test2     Test3      Test4    
  0        0         0          0        
  0        0         0          0
  1        0         1          0
  0        0         0          0
  0        1         0          1

需要创建新变量New_Var,满足规则:

  • 当所有以Test开头的变量值均为0时,New_Var取值为2
  • 当至少一个以Test开头的变量值为1时,New_Var取值为0

期望输出结果:

Test1    Test2     Test3      Test4    New_Var 
  0        0         0          0         2     
  0        0         0          0         2
  1        0         1          0         0
  0        0         0          0         2
  0        1         0          1         0
解决方案

以下是几种常见数据处理工具的实现方法:

1. Python(Pandas)

筛选Test开头的列,通过每行求和判断是否全为0,再赋值生成新变量:

import pandas as pd
import numpy as np

# 构造数据集
data = pd.DataFrame({
    'Test1': [0, 0, 1, 0, 0],
    'Test2': [0, 0, 0, 0, 1],
    'Test3': [0, 0, 1, 0, 0],
    'Test4': [0, 0, 0, 0, 1]
})

# 创建New_Var
test_cols = data.filter(like='Test')
data['New_Var'] = np.where(test_cols.sum(axis=1) == 0, 2, 0)

print(data)

2. R语言

用starts_with匹配目标列,结合行求和结果判断并生成新变量:

library(dplyr)

# 构造数据集
data <- data.frame(
  Test1 = c(0, 0, 1, 0, 0),
  Test2 = c(0, 0, 0, 0, 1),
  Test3 = c(0, 0, 1, 0, 0),
  Test4 = c(0, 0, 0, 0, 1)
)

# 创建New_Var
data <- data %>%
  mutate(New_Var = ifelse(rowSums(select(., starts_with("Test"))) == 0, 2, 0))

print(data)

3. SAS

通过数组遍历Test开头的变量,判断每行是否全为0后赋值:

data want;
    set have;
    array tests[*] Test:;
    all_zero = 1;
    do i = 1 to dim(tests);
        if tests[i] = 1 then do;
            all_zero = 0;
            leave;
        end;
    end;
    New_Var = ifc(all_zero, 2, 0);
    drop i all_zero;
run;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:58:17