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

基于双列表设置Pandas DataFrame值的代码提速优化问询

高效处理75万行DataFrame温度过滤方案

直接放弃遍历,用Pandas向量化操作——这是处理大数据量的核心思路,比循环快几十甚至上百倍。以下是具体步骤:

1. 对齐月份与阈值列表的索引关系

假设你的mintempf_list和maxtempf_list是按月份顺序存储(索引0对应1月,索引1对应2月…索引11对应12月),而DataFrame的MO列是1-12的数值,先把MO转成列表的0基索引:

df['mo_idx'] = df['MO'] - 1

2. 快速映射对应月份的温度阈值

用map或take方法,把每行的月份匹配到对应的温度阈值:

# 方法1:用字典映射,直观易懂
month_min = {i+1: mintempf_list[i] for i in range(12)}
month_max = {i+1: maxtempf_list[i] for i in range(12)}
min_temp = df['MO'].map(month_min)
max_temp = df['MO'].map(month_max)

# 方法2:用索引直接取值,数据量极大时略快
min_temp = mintempf_list[df['mo_idx']]
max_temp = maxtempf_list[df['mo_idx']]

3. 批量过滤TEMP列

用numpy.where或Pandas原生where方法,一次性完成所有行的条件判断与赋值:

import numpy as np

# 定义有效条件:TEMP不为空 且 在当月温度阈值范围内
valid_condition = df['TEMP'].notna() & (df['TEMP'] >= min_temp) & (df['TEMP'] <= max_temp)

# 不符合条件的设为np.nan
df['TEMP'] = np.where(valid_condition, df['TEMP'], np.nan)

# 或者用Pandas的where方法,效果完全一致
# df['TEMP'] = df['TEMP'].where(valid_condition, np.nan)

为什么这方法快?

Pandas的向量化操作是底层用C实现的,不会像Python循环那样逐行解释执行,75万行数据处理下来应该在几秒到几十秒内完成,绝对不会超过1小时。

关于你之前的vectorize报错

numpy vectorize本质还是包装后的循环,效率提升有限,而且如果月份与列表的索引对应关系没处理好(比如MO是1-12但列表是0基),就会触发索引越界错误,远不如直接用上面的向量化方法靠谱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:41:29