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

如何按ID聚合数据并保留非重复字段?(Reshape to wide without timevar)

按ID分组求和Sum字段的实现方法

以下是几种常用工具的实现方案,根据你的使用场景选择即可:

Python(Pandas)

两种写法都能实现需求,第一种更贴合"按id+相同字段分组"的逻辑,第二种适用于确认每个id对应a/b/c唯一的场景:

写法1:按id、a、b、c分组求和

import pandas as pd

# 示例数据(实际可通过pd.read_csv等方式读取)
data = {
    'id': [1,1,1,2,2],
    'a': ['state','state','state','county','county'],
    'b': ['yes','yes','yes','no','no'],
    'c': [1,1,1,4,4],
    'sum': [0,234,45,456,55]
}
df = pd.DataFrame(data)

# 分组聚合
result = df.groupby(['id', 'a', 'b', 'c'], as_index=False)['sum'].sum()
print(result)

写法2:按id分组,保留a/b/c的首个值并求和sum

result = df.groupby('id').agg({
    'a': 'first',
    'b': 'first',
    'c': 'first',
    'sum': 'sum'
}).reset_index()

SQL

如果数据存储在数据库中,直接执行分组求和语句即可:

SELECT id, a, b, c, SUM(sum) AS sum
FROM your_table
GROUP BY id, a, b, c;

注:由于每个id对应的a/b/c值完全一致,部分数据库支持仅按id分组,但带上所有非聚合字段更符合SQL标准,兼容性更强。

R语言

使用dplyr包(推荐)

library(dplyr)

# 示例数据
data <- data.frame(
    id = c(1,1,1,2,2),
    a = c('state','state','state','county','county'),
    b = c('yes','yes','yes','no','no'),
    c = c(1,1,1,4,4),
    sum = c(0,234,45,456,55)
)

# 分组求和
result <- data %>%
    group_by(id, a, b, c) %>%
    summarise(sum = sum(sum), .groups = 'drop')

print(result)

使用Base R的aggregate函数

result <- aggregate(sum ~ id + a + b + c, data = data, FUN = sum)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:30:25