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

如何在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)

输出结果:

IDValueValue 2
Acd
BeNA

说明

  • 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)

输出结果:

IDValueValue 2
Acd
Be

说明

  • cumcount() + 1生成从1开始的序号,与R中的1:n()逻辑一致
  • pivot自动将序号转为列名,后续通过列表推导式重命名列,确保格式符合要求
  • fillna(pd.NA)统一缺失值显示格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:40:00