Pandas按code分组统计价格极值、均值及对应卖家并处理空值问题
实现步骤
- 分组逻辑优化:使用
code_1+code_2作为联合分组键,同时设置dropna=False,保留其中一个字段为空的分组,解决空值分组丢失的问题 - 自定义聚合逻辑:对每个分组同时计算平均/最高/最低价格,同时匹配价格对应的卖家信息
完整代码
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
相关产品推荐
相关产品推荐

