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

如何按DataFrame中邮政编码分组求价格中位数并新增列?

问题原因及修正方案

你的代码存在两处关键错误,导致新列显示的是全局中位数而非分组中位数:

错误1:分组维度错误

你使用groupby(['zipcode','price']),这会按邮政编码+价格的组合进行分组,而非仅按邮政编码分组,完全偏离了按邮编计算中位数的需求。

错误2:赋值逻辑错误

df['price'].median()计算的是整个数据集的价格中位数,和分组结果无关,自然无法得到各邮编对应的分组中位数。


修正后的代码(两种写法)

写法1:修正原有代码结构

d = {'zipcode': [99516, 99516, 99516, 99516, 89507, 89507, 89507], 
    'price': [15000, 14000, 13000, 78000, 3000, 4000, 500]}
df = pd.DataFrame(data=d)

# 仅按zipcode分组,用transform生成与原表同长度的分组中位数序列
medians = df.groupby('zipcode')['price'].transform('median')

# 将分组中位数赋值给新列
df['median'] = medians
df 

写法2:更简洁的链式写法

d = {'zipcode': [99516, 99516, 99516, 99516, 89507, 89507, 89507], 
    'price': [15000, 14000, 13000, 78000, 3000, 4000, 500]}
df = pd.DataFrame(data=d)

# 直接将分组中位数结果赋值给新列
df['median'] = df.groupby('zipcode')['price'].transform('median')
df

执行后median列会正确显示对应邮编的分组中位数:

  • 邮编99516的中位数为14500
  • 邮编89507的中位数为3000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:01:40