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

Pandas按code分组统计价格极值、均值及对应卖家并处理空值问题

实现步骤

  1. 分组逻辑优化:使用code_1+code_2作为联合分组键,同时设置dropna=False,保留其中一个字段为空的分组,解决空值分组丢失的问题
  2. 自定义聚合逻辑:对每个分组同时计算平均/最高/最低价格,同时匹配价格对应的卖家信息

完整代码

import pandas as pd
import numpy as np

# 演示用DataFrame,可替换为你的实际数据
df = pd.DataFrame({'code_1':[123,456,789,456,123, np.nan],
                   'code_2':[333,666,999,666,333, 777],
                   'seller':['Andres','Mike','Paul','Andy','Mike', 'Lily'],
                   'price':[12.2,23.51,12.34,10.2,13.0, 22.1]})

def group_stat(group):
    # 计算价格指标
    max_price = group['price'].max()
    min_price = group['price'].min()
    avg_price = group['price'].mean().round(2) # 保留小数位数可自行调整
    # 匹配对应卖家,同价时默认取第一个,如需全部卖家可改为 .str.cat(sep=',')
    seller_max = group.loc[group['price'] == max_price, 'seller'].iloc[0]
    seller_min = group.loc[group['price'] == min_price, 'seller'].iloc[0]
    return pd.Series({
        'seller_maxprice': seller_max,
        'max_price': max_price,
        'avg_price': avg_price,
        'seller_minprice': seller_min,
        'min_price': min_price
    })

# 分组计算,dropna=False保留含空值的分组
result = df.groupby(['code_1', 'code_2'], dropna=False).apply(group_stat).reset_index()
print(result)

同价特殊场景处理

如果同一个分组中存在多个相同的最高/最低价格,需要展示所有对应卖家的话,将卖家匹配逻辑修改为:

seller_max = group.loc[group['price'] == max_price, 'seller'].str.cat(sep=',')
seller_min = group.loc[group['price'] == min_price, 'seller'].str.cat(sep=',')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:05