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
原代码问题说明
- 列名不匹配:原始数据的分类列名为
categ、成本列名为cost,原代码中使用的category、price都是不存在的列,会直接报错 - 逻辑不完整:仅处理了A类的成本扣减,没有给对应B类叠加转移的金额
内容的提问来源于stack exchange,提问作者hippocampus
相关产品推荐
相关产品推荐

