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

Pandas按id分组后基于类别调整cost数值列的实现方法

实现代码及说明

核心逻辑是先提取每个id对应A类成本的20%作为转移金额,再分别对A、B类成本做加减处理。

完整可运行代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
dff = pd.DataFrame({'id':[1,1,2,2], 'categ':['A','B','A','B'],'cost':[20,5, 30,10] })

# 生成每个id对应的A类成本20%的映射表
a_transfer = dff[dff['categ'] == 'A'].set_index('id')['cost'] * 0.2

# 给每行匹配对应id的转移金额,计算最终price
dff['price'] = np.where(
    dff['categ'] == 'A',
    dff['cost'] - dff['id'].map(a_transfer),
    dff['cost'] + dff['id'].map(a_transfer)
)

# 整理输出为要求的格式
result = dff[['id', 'categ', 'price']].rename(columns={'categ':'category'})
# 如需price为整数可加以下代码
# result['price'] = result['price'].astype(int)
print(result)

输出结果

id category  price
0   1        A   16.0
1   1        B    9.0
2   2        A   24.0
3   2        B   16.0

原代码问题说明

  1. 列名不匹配:原始数据的分类列名为categ、成本列名为cost,原代码中使用的category、price都是不存在的列,会直接报错
  2. 逻辑不完整:仅处理了A类的成本扣减,没有给对应B类叠加转移的金额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:39:04