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

Python 3中如何获取Pandas DataFrame区间内的所有值?

解决Pandas生成区间所有值的问题

没问题,针对你这个需求,我给你分几种方案——从简单易读的基础版,到适合1万+记录的高效版,甚至极端大数据量下的内存友好方案,你可以根据自己的场景选择:

先构造你的示例数据

先把你给出的DataFrame用代码还原出来:

import pandas as pd

data = {
    'min': [10186, 10197, 10199, 11144, 11656, 13500, 13979, 14445, 14448],
    'max': [10186, 10197, 11142, 11654, 13498, 13977, 14442, 14446, 14449]
}
df = pd.DataFrame(data)

基础实现(适合小数据集)

如果你的单条记录区间不大,这个方法简单直观,用apply生成每行的数值序列,再用explode展开:

# 给每行生成min到max的所有值(包含边界)
df['values'] = df.apply(lambda row: pd.Series(range(row['min'], row['max'] + 1)), axis=1)
# 展开成单行单值的格式
result = df.explode('values').reset_index(drop=True)

缺点:逐行apply在1万条记录+大区间的场景下会很慢,而且会占用较多内存。

高效向量化实现(适合1万+记录)

用numpy的向量化操作替代逐行循环,速度会快很多,内存使用也更紧凑:

import numpy as np

# 计算每个区间的长度(包含两端,所以是max - min + 1)
lengths = df['max'] - df['min'] + 1

# 核心逻辑:重复每个min值对应次数,再加上0到length-1的偏移量
all_values = np.repeat(df['min'].values, lengths) + np.concatenate([np.arange(l) for l in lengths])

# 转成DataFrame格式(也可以直接用numpy数组)
result_df = pd.DataFrame({'value': all_values})

优势:向量化操作是Pandas/numpy的性能最优实践,处理1万条记录完全不在话下。

保留原行信息的版本

如果你需要保留每条原始记录的min和max字段,只需要对原列做同样的重复操作:

expanded_df = pd.DataFrame({
    'original_min': np.repeat(df['min'].values, lengths),
    'original_max': np.repeat(df['max'].values, lengths),
    'value': all_values
})

极端大数据量的内存友好方案

如果有些区间的范围特别大(比如max-min达到几万甚至更多),一次性生成所有值会撑爆内存,这时候可以用迭代器逐个生成值,边生成边处理(比如写入文件):

def generate_values(df):
    for _, row in df.iterrows():
        # 遍历当前行的所有区间值
        for val in range(row['min'], row['max'] + 1):
            yield (row['min'], row['max'], val)

# 使用迭代器处理,不会一次性加载所有数据到内存
for item in generate_values(df):
    original_min, original_max, current_val = item
    # 这里可以写处理逻辑,比如写入CSV/数据库
    # print(current_val)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:02:59