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

如何基于起拍价用累计最大值修正DataFrame中物品价值列数据

解决方法

要搞定这个问题,核心是对每个ItemType+ItemOrigin的分组,按起拍价升序排序后计算累计最大值,用这个值修正不符合规则的物品价值。用Pandas的groupby配合cummax()就能实现,具体步骤如下:

代码实现

import pandas as pd

# 假设你的数据存储在df中
def process_group(group):
    # 按起拍价升序排列,确保从低到高处理
    sorted_group = group.sort_values('Starting Bid')
    # 用累计最大值替换原价值列,保证高起拍价的价值不低于之前所有低起拍价的物品
    sorted_group['Value of item'] = sorted_group['Value of item'].cummax()
    return sorted_group

# 分组处理,保持原数据结构
df_cleaned = df.groupby(['ItemType', 'ItemOrigin'], group_keys=False).apply(process_group)

# 恢复原DataFrame的行顺序(如果需要保留原始行排列)
df_cleaned = df_cleaned.loc[df.index]

关键细节

  • groupby(..., group_keys=False):避免分组键混入结果索引,保持原DataFrame的列结构不变。
  • cummax():这是核心逻辑——它会逐行计算从第一行到当前行的最大值,自动确保同组内起拍价越高,物品价值不会低于任何更低起拍价的物品,完美匹配你设定的规则。
  • 最后用loc[df.index]还原原始行顺序,防止分组排序后打乱数据的原有排列逻辑。

效果验证

比如原始数据中有不符合规则的行:

ItemTypeItemOriginStarting BidValue of item
电子设备中国500700
电子设备中国800750
电子设备中国1000720

处理后结果:

ItemTypeItemOriginStarting BidValue of item
电子设备中国500700
电子设备中国800750
电子设备中国1000750

这样就完成了事后的数据清洗,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:22:13