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

如何用Pandas按城市分组筛选5%-95%百分位的包裹重量数据

解决方案

要实现按城市分组,保留重量处于5%到95%百分位之间的数据,你可以用Pandas的groupby结合transform方法来实现类似SQL窗口函数的逻辑,具体操作如下:

步骤1:计算每个城市的分位数阈值

通过按城市分组,用transform方法为每一行匹配其所在城市的5%和95%分位数,将结果作为新列存入原数据框,方便后续筛选。

步骤2:筛选符合条件的数据

基于生成的分位数列,筛选出weight大于5%分位数且小于95%分位数的行。

完整代码示例

import pandas as pd

# 原始数据集
df = pd.DataFrame({
    'city': ['LA', 'Berlin', 'Hamburg', 'LA', 'Berlin', 'Hamburg', 'Tokyo', 'Hamburg', 'Berlin', 'Hamburg', 'Hamburg', 'Hamburg', 'Berlin', 'Hamburg', 'Berlin', 'Tokyo', 'Tokyo', 'Tokyo'],
    'weight': [930,933,1577,1018,547,981,1672,598,995,1164,601,1429,1349,1000,618,539,880,1472]
})

# 为每行匹配所在城市的5%、95%分位数
df['q5'] = df.groupby('city')['weight'].transform(lambda x: x.quantile(0.05))
df['q95'] = df.groupby('city')['weight'].transform(lambda x: x.quantile(0.95))

# 筛选数据并移除临时列
filtered_df = df[(df['weight'] > df['q5']) & (df['weight'] < df['q95'])].drop(columns=['q5', 'q95'])

print(filtered_df)

代码说明

  • groupby('city')['weight'].transform():对每个城市的重量列独立计算分位数,返回与原数据长度一致的结果,确保每行对应自身城市的阈值。
  • x.quantile(0.05)/x.quantile(0.95):分别计算5%和95%分位数,可根据需求调整分位数数值。
  • 最后通过布尔索引筛选目标数据,删除临时生成的分位数列得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:10:26