**大数据量(几千万行)划分价格区间(价格段)

Polars 对于 大数据量(几千万行)划分价格区间(价格段) 有非常高效的原生方法,推荐使用:


✅ 方法一:使用 pl.when().then().otherwise() 分段(推荐)

适合自定义的非等距价格区间,如:

  • 0--999 元
  • 1000--1999 元
  • 2000--4999 元
  • 5000 元及以上
less 复制代码
df = df.with_columns([
    pl.when(pl.col("price") < 1000).then("0-999")
    .when(pl.col("price") < 2000).then("1000-1999")
    .when(pl.col("price") < 5000).then("2000-4999")
    .otherwise("5000+")
    .alias("price_range")
])

这是 纯表达式向量化处理,速度极快,适合千万行数据。


✅ 方法二:用 cut 类似 Pandas 的 pd.cut(等距或自定义区间)

虽然 Polars 本身没有内置 cut 函数,但你可以手动实现类似功能:

less 复制代码
# 假设你想把价格分为每 1000 元一个区间
step = 1000
df = df.with_columns([
    ((pl.col("price") // step) * step).cast(pl.Int32).alias("price_floor"),
    (((pl.col("price") // step) + 1) * step - 1).cast(pl.Int32).alias("price_ceiling")
])

df = df.with_columns([
    (pl.col("price_floor").cast(pl.Utf8) + "-" + pl.col("price_ceiling").cast(pl.Utf8)).alias("price_range")
])

例如价格为 2789,则落入区间 2000-2999


✅ 方法三:提前准备好价格段字典 + broadcast join(适合维护复杂区间)

ini 复制代码
# 区间定义 DataFrame
price_bins = pl.DataFrame({
    "price_range": ["0-999", "1000-1999", "2000-4999", "5000+"],
    "min_price": [0, 1000, 2000, 5000],
    "max_price": [999, 1999, 4999, float("inf")]
})

# 扩展 df 加入 price_range 列(条件 join)
df = df.join(price_bins, how="inner", 
             left_on=pl.col("price"), 
             right_on=(pl.col("min_price") <= pl.col("price")) & (pl.col("price") <= pl.col("max_price")))

注意这种做法适合精细化分段,并且你能维护段表。


性能建议(千万级数据):

技术点 建议
⚡ 用 .with_columns([...]) 替代 .apply() 速度数量级提升
⚡ 使用 LazyFrame + .collect() 推迟执行 + 自动优化
⚡ 使用 .parquet 等列式文件格式 节省内存+加快读取
⚡ 多线程默认开启 无需手动并行

相关推荐
“AI国潮设计-小江”6 小时前
《Python实战 | SDXL大模型批量生成“英歌舞海浪”蛋糕IP,附核心Prompt控制代码与IP授权变现思路》
人工智能·python·prompt·aigc
znnnk7 小时前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt
触底反弹8 小时前
面试被问到 Text2SQL,我用 DeepSeek 自己实现了一个
python·sqlite
2601_962295589 小时前
python+selenium实现自动化测试
自动化测试·python·selenium·学习心得·web端测试
青 春 记 忆9 小时前
零基础入门python66:FastAPI AI标题、摘要和标签
python·fastapi·后端开发
qq_22589174669 小时前
基于Python+Django的LangGraph智能旅游规划系统
python·django·旅游
青 春 记 忆9 小时前
零基础入门python65:FastAPI 安全调用大模型API
python·fastapi·后端开发
维克兜率天10 小时前
【维克】特征归一化与标准化:为什么模型对数据的“尺度“很敏感?
人工智能·笔记·python·机器学习·量化
2601_9622986710 小时前
Python multiprocessing PicklingError: Can&#39;t pickle &l
python·module·multiprocessing·function·picklingerror
CV山月10 小时前
大模型强化学习对齐:从 RLHF 框架到 PPO 算法原理
人工智能·python·大模型·强化学习·多模态·研究生