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

使用dplyr处理数据集:按ID计算Main=0时Size*Distance的求和结果

分组筛选计算求和解决方案

原始数据集

ID  Main Size Distance
    1    1    2     0
    1    0    3     1
    1    0    4     2
    2    1    5     0
    2    0    6     2
    2    0    7     3

需求说明

按ID分组,仅针对每组中Main为0的行,计算Size与Distance的乘积,再将这些乘积求和,最终生成包含ID和求和结果Result的数据集,预期结果如下:

ID  Result
    1    11
    2    33

解决方案

方法1:使用R语言(dplyr包)

核心逻辑是先筛选Main=0的行,再按ID分组求和,通过na.rm=TRUE避免缺失值导致的NA/NaN:

library(dplyr)

# 构造数据集
df <- data.frame(
  ID = c(1,1,1,2,2,2),
  Main = c(1,0,0,1,0,0),
  Size = c(2,3,4,5,6,7),
  Distance = c(0,1,2,0,2,3)
)

# 计算求和结果
result <- df %>%
  filter(Main == 0) %>%
  group_by(ID) %>%
  summarise(Result = sum(Size * Distance, na.rm = TRUE))

print(result)

方法2:使用Python语言(pandas库)

先筛选符合条件的行,再计算乘积后分组求和,pandas默认忽略缺失值,也可显式指定skipna=True:

import pandas as pd

# 构造数据集
df = pd.DataFrame({
    'ID': [1,1,1,2,2,2],
    'Main': [1,0,0,1,0,0],
    'Size': [2,3,4,5,6,7],
    'Distance': [0,1,2,0,2,3]
})

# 简洁写法
result = df[df['Main'] == 0].assign(Product=lambda x: x['Size'] * x['Distance'])\
                            .groupby('ID')['Product'].sum()\
                            .reset_index(name='Result')

print(result)

你之前出现NA/NaN的原因大概率是未提前筛选Main=0的行,导致分组计算时包含了不符合条件的行或缺失值,提前筛选即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:31:02