如何按唯一ID分组 合并同ID下各列1值为单行结果
实现方案
你的需求核心逻辑非常明确:按ID分组后,对V1~V7每一列取最大值。由于所有V列的取值只有0和1,只要某ID对应的列任意一行出现过1,最大值即为1;所有行都是0时最大值为0,完全匹配你需要的聚合效果。
下面给3种常用场景下的实现方式,你可以根据自己熟悉的工具选择:
方法1:Python + Pandas(千行以上数据效率最高,代码最简)
- 若未安装pandas,先在终端执行安装命令:
pip install pandas - 将原始数据保存为制表符分隔的文本/CSV文件(命名为
raw_data.csv),运行以下代码即可直接输出结果:import pandas as pd # 读取原始数据,若为逗号分隔的CSV则删除sep='\t'参数 df = pd.read_csv("raw_data.csv", sep="\t") # 按ID分组聚合,对所有V列取最大值 result = df.groupby("ID", as_index=False).agg({f"V{i}":"max" for i in range(1,8)}) # 保存结果到文件 result.to_csv("agg_result.csv", sep="\t", index=False) - 运行后生成的
agg_result.csv和你给出的期望输出完全一致。
方法2:Excel/WPS 可视化操作(无需写代码)
- 选中全部原始数据区域,点击「插入」选项卡-「数据透视表」,选择将透视表放在新工作表中
- 在右侧字段配置面板,将
ID字段拖入「行」区域,将V1~V7所有字段拖入「值」区域 - 逐个点击值区域内的V1~V7字段,选择「值字段设置」,将汇总方式从默认的「计数」修改为「最大值」,点击确定
- 透视表会自动完成聚合,将结果复制为普通数值、调整列格式即可得到最终输出。
方法3:R语言实现
使用dplyr包的分组聚合逻辑即可快速完成,代码如下:
library(dplyr) # 读取原始数据 raw_df <- read.delim("raw_data.csv", sep="\t") # 按ID分组对V列取最大值 result_df <- raw_df %>% group_by(ID) %>% summarise(across(V1:V7, max)) %>% ungroup() # 写出结果 write.table(result_df, "agg_result.csv", sep="\t", row.names = FALSE, quote = FALSE)
内容的提问来源于stack exchange,提问作者Katrix_02
相关产品推荐
相关产品推荐

