如何在R/Pandas中合并重复ID行的Value至首行扩展列并去重?
处理重复ID的DataFrame:合并重复行数据到首行额外列
R语言解决方案
利用dplyr和tidyr包的pivot_wider函数可直接完成动态列生成与数据填充,无需手动创建空列,适配实时数据集的可变重复次数:
library(dplyr) library(tidyr) # 示例原始数据 df <- tibble(ID = c("A", "A", "B"), Value = c("c", "d", "e")) # 生成序号并转换为宽格式 result_df <- df %>% group_by(ID) %>% mutate(occurrence = 1:n()) %>% pivot_wider( names_from = occurrence, names_prefix = "Value ", values_from = Value, values_fill = NA ) %>% rename(Value = `Value 1`) # 将首列重命名为原"Value" print(result_df)
输出结果:
| ID | Value | Value 2 |
|---|---|---|
| A | c | d |
| B | e | NA |
说明
pivot_wider会自动根据每个ID的最大重复次数生成对应列,无需预先计算并创建空列values_fill = NA确保无重复数据的位置自动填充缺失值- 最后通过
rename将自动生成的Value 1列改回原列名Value,匹配需求格式
Python Pandas解决方案
使用pivot函数结合分组序号实现相同效果:
import pandas as pd # 示例原始数据 df = pd.DataFrame({ "ID": ["A", "A", "B"], "Value": ["c", "d", "e"] }) # 生成每个ID的出现序号 df["occurrence"] = df.groupby("ID").cumcount() + 1 # 转换为宽格式并重置索引 result_df = df.pivot( index="ID", columns="occurrence", values="Value" ).reset_index() # 重命名列名以匹配需求 result_df.columns = ["ID"] + [f"Value {col}" if col != 1 else "Value" for col in result_df.columns[1:]] # 填充缺失值 result_df = result_df.fillna(pd.NA) print(result_df)
输出结果:
| ID | Value | Value 2 |
|---|---|---|
| A | c | d |
| B | e |
说明
cumcount() + 1生成从1开始的序号,与R中的1:n()逻辑一致pivot自动将序号转为列名,后续通过列表推导式重命名列,确保格式符合要求fillna(pd.NA)统一缺失值显示格式
内容的提问来源于stack exchange,提问作者O Stanley
相关产品推荐
相关产品推荐

