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

基于DataFrame分组转换:按当前行值的条件求和实现

按商品-门店分组实现条件求和生成Result列

需求说明

现有百万级行的DataFrame,字段包含article(商品)、shop(门店)、size(尺码)、units(数量),需要生成新列Result:

  • 当当前行units不为NaN时,Result为该商品在对应门店下所有非NaN的units总和;
  • 当当前行units为NaN时,Result直接设为NaN。
    要求避免逐行遍历,使用groupby+transform实现。

示例数据

import numpy as np
import pandas as pd

data = {
    "article": ("A", "A", "A", "A", "A", "A", "A"),
    "shop": ("x", "x", "y", "y", "z", "z", "z"),
    "size": ("M", "L", "M", "L", "M", "L", "S"),
    "units": (1, 2, np.nan, 4, np.nan, 6, 7)
}
df = pd.DataFrame(data)

期望Result列

[3, 3, np.nan, 4, np.nan, 13, 13](对应1+2、1+2、空、4、空、6+7、6+7)

解决方案代码

# 按article和shop分组计算组内非NaN总和,再根据当前行units状态赋值
df["Result"] = df.groupby(["article", "shop"])["units"].transform(
    lambda g: g.sum(skipna=True)
).where(df["units"].notna(), np.nan)

代码解释

  1. 分组求和:groupby(["article", "shop"])精准锁定「同一商品+同一门店」的分组范围,transform会为每组的每一行返回该组内所有非NaN的units总和,保证每行都能匹配对应分组的计算结果;
  2. 条件过滤:利用where方法判断当前行units是否非空——非空则保留分组求和结果,为空则设为NaN,完全贴合需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:23