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

如何统计多列中仅含1个"A"值的ID数量?

针对大型数据集的统计方案

要统计s1-s4列中仅包含1个"A"的ID数量,关键是先统一处理不同格式的缺失值(你的数据里有"NA"、"Na"两种写法),再高效统计每行的"A"个数,以下是两种常用数据分析工具的实现:

R语言方案(适合大型数据集)

推荐用data.table(处理速度快,内存占用低)或dplyr:

用data.table实现

library(data.table)

# 读取大型数据文件(fread比read.csv更高效)
dt <- fread("your_dataset.csv")

# 指定目标列
target_cols <- c("s1", "s2", "s3", "s4")

# 统一将"NA"、"Na"转为标准NA值
dt[, (target_cols) := lapply(.SD, function(x) ifelse(tolower(x) == "na", NA_character_, x)), .SDcols = target_cols]

# 统计每行"A"的数量,筛选出数量为1的行并计数
result <- dt[, sum(rowSums(.SD == "A", na.rm = TRUE) == 1), .SDcols = target_cols]
print(result)

用dplyr实现

library(dplyr)

df <- read.csv("your_dataset.csv") %>%
  # 统一处理缺失值
  mutate(across(s1:s4, ~ifelse(tolower(.x) == "na", NA_character_, .x))) %>%
  # 计算每行"A"的数量
  mutate(a_count = rowSums(across(s1:s4, ~.x == "A"), na.rm = TRUE)) %>%
  # 筛选数量为1的行,统计行数
  filter(a_count == 1) %>%
  nrow()

print(df)

Python方案(适合超大型数据集)

用pandas处理常规大数据,超大数据(内存放不下)用dask分块处理:

用pandas实现

import pandas as pd

# 读取数据,大文件可添加chunksize参数分块读取
df = pd.read_csv("your_dataset.csv")

target_cols = ["s1", "s2", "s3", "s4"]

# 统一替换缺失值标识
df[target_cols] = df[target_cols].replace({"NA": pd.NA, "Na": pd.NA})

# 统计每行"A"的数量,筛选等于1的并计数
result = (df[target_cols] == "A").sum(axis=1).eq(1).sum()
print(result)

用dask处理超大型数据集(内存不足时)

import dask.dataframe as dd

# 分块读取数据
ddf = dd.read_csv("your_dataset.csv")

target_cols = ["s1", "s2", "s3", "s4"]
ddf[target_cols] = ddf[target_cols].replace({"NA": pd.NA, "Na": pd.NA})

# 计算结果并触发执行
result = (ddf[target_cols] == "A").sum(axis=1).eq(1).sum().compute()
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:35:26