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

如何在pandas DataFrame中按规则新增sell及单店总销售额两列?

实现方案

步骤1:计算sell列

根据规则,unit_percent为空时sell取5,否则取units数值除以unit_percent数值:

import pandas as pd
import numpy as np

# 初始化示例DataFrame
df = pd.DataFrame({
    "store_id": ["1", "1", "2", "2", "3", "3"], 
    "units":  ["5 or less", "17", "5 or less", "5 or less", "28", "15"], 
    "unit_percent":  ["","0.37","","","0.57","0.48" ]
})

# 计算sell列
def get_sell(row):
    if not row["unit_percent"].strip():
        return 5
    return int(row["units"]) / float(row["unit_percent"])

df["sell"] = df.apply(get_sell, axis=1)

步骤2:计算total_sell_per_store列

按store_id分组后按规则计算单店总销售额,仅在分组内第一行展示数值,其余行留空:

def get_store_total(group):
    # 筛选当前分组内unit_percent非空的行
    valid_sell = group[group["unit_percent"].str.strip() != ""]["sell"]
    if len(valid_sell) > 0:
        # 存在有效行取最大sell值
        total = valid_sell.max()
    else:
        # 无有效行取所有行sell求和
        total = group["sell"].sum()
    # 仅第一行赋值,其余为NaN
    res = pd.Series([np.nan] * len(group), index=group.index)
    res.iloc[0] = total
    return res

df["total_sell_per_store"] = df.groupby("store_id", group_keys=False).apply(get_store_total)

如果需要控制小数精度,可在计算环节增加round()方法处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:04