Pandas DataFrame分组及商品跨地区成本差异检测与计算问题
Pandas DataFrame分组及商品跨地区成本差异检测与计算问题
嘿,我完全懂你现在卡在这儿的感觉!咱们来一步步解决这个问题——你想要找出同一天里同一款商品在不同地区有没有成本差异,还想算出具体差了多少,对吧?先看看你提供的这份数据:
distributor Location Date item cost 0 GEC KA 2025-02-01 Apple 10.0 1 GEC TN 2025-02-01 Apple 10.0 2 GEC AP 2025-02-01 Apple 9.0 3 GEC KA 2025-02-02 Orange 8.0 4 GEC TN 2025-02-02 Orange 7.0 5 GEC AP 2025-02-02 Orange 8.5 6 GEC KA 2025-02-03 Banana 6.0 7 GEC TN 2025-02-03 Banana 6.0 8 GEC AP 2025-02-03 Banana 6.0
第一步:检测哪些商品在同一天存在跨地区成本差异
你之前尝试按日期、商品分组的思路是对的!我们可以通过分组后检查每组内的成本值是否唯一,来判断有没有差异:
import pandas as pd # 假设你的数据已经存入DataFrame df # 给每一行标记:该日期+商品是否存在成本差异 df['has_cost_diff'] = df.groupby(['Date', 'item'])['cost'].transform(lambda x: x.nunique() > 1) # 筛选出所有存在差异的记录,方便查看 diff_records = df[df['has_cost_diff']] print(diff_records)
运行后你会看到,Apple(2025-02-01)和Orange(2025-02-02)这两组是有差异的,Banana那组没有。
第二步:计算具体的成本差异
接下来咱们可以算出差值,这里给你两种常用的方式:
方式一:计算每组的最大最小成本差
如果你只想知道每个日期+商品组合的最大成本差,可以这样做:
# 按日期和商品分组,聚合出最小成本、最大成本以及差值 cost_diff_summary = df.groupby(['Date', 'item']).agg( min_cost=('cost', 'min'), max_cost=('cost', 'max'), cost_diff=('cost', lambda x: x.max() - x.min()) ).reset_index() # 只保留有差异的条目 cost_diff_summary = cost_diff_summary[cost_diff_summary['cost_diff'] > 0] print(cost_diff_summary)
输出结果会清晰显示:Apple在2025-02-01的成本差是1.0,Orange在2025-02-02的成本差是1.5。
方式二:和指定基准地区的成本对比
如果你想知道每个地区和某个基准地区(比如KA)的成本差,可以这样:
# 先提取KA地区的成本作为基准值 ka_cost = df[df['Location'] == 'KA'][['Date', 'item', 'cost']].rename(columns={'cost': 'ka_cost'}) # 和原数据合并,计算每个地区与KA的成本差 df_with_ka_diff = pd.merge(df, ka_cost, on=['Date', 'item'], how='left') df_with_ka_diff['diff_from_ka'] = df_with_ka_diff['cost'] - df_with_ka_diff['ka_cost'] # 筛选出和KA有差异的记录 diff_from_ka_records = df_with_ka_diff[df_with_ka_diff['diff_from_ka'] != 0] print(diff_from_ka_records)
这样你就能看到:AP的Apple比KA便宜1.0,TN的Orange比KA便宜1.0,AP的Orange比KA贵0.5,一目了然。
备注:内容来源于stack exchange,提问作者Abhishek K M
相关产品推荐
相关产品推荐

