如何找出在95%列中存在的数据项?(Python/R实现)
解决方案
R 实现方法
假设你的数据框是df,我们需要统计每个元素在多少个不同列中出现,再筛选出现列数为19或20的项:
方法1:使用tidyverse工具链
library(tidyverse) # 1. 将宽表转为长格式,保留列名信息 long_df <- df %>% pivot_longer(cols = everything(), names_to = "column", values_to = "item") %>% # 2. 去除同一列内的重复项(避免同一列多次计数) distinct(column, item) # 3. 统计每个item出现的列数,筛选符合条件的项 result <- long_df %>% count(item, name = "column_count") %>% filter(column_count %in% c(19, 20)) # 查看结果 print(result)
方法2:基础R实现
如果不想加载额外包,可以用基础R:
# 1. 收集每一列的唯一元素,记录所属列 item_list <- lapply(names(df), function(col) { data.frame(item = unique(df[[col]]), column = col) }) long_df <- do.call(rbind, item_list) # 2. 去重并统计列数 count_table <- table(long_df$item) # 3. 筛选列数19或20的项 result <- names(count_table)[count_table %in% c(19, 20)] # 查看结果 print(result)
Python 实现方法
用pandas库来处理,步骤如下:
import pandas as pd # 假设你的数据框是df # 1. 创建字典,记录每个item出现的列集合 item_columns = {} for col in df.columns: # 获取当前列的唯一元素,若有缺失值可通过dropna()去除 unique_items = df[col].dropna().unique() for item in unique_items: if item not in item_columns: item_columns[item] = set() item_columns[item].add(col) # 2. 统计每个item的列数,筛选符合条件的项 result = [item for item, cols in item_columns.items() if len(cols) in (19, 20)] # 查看结果 print(result)
补充说明
- 上述代码默认同一列内的重复元素只算一次(统计的是元素“存在于多少列”,而非总出现次数)
- 如果数据中存在缺失值,记得提前处理,避免缺失值被误统计
内容的提问来源于stack exchange,提问作者Sarah Nic
相关产品推荐
相关产品推荐

