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

Python按列数值区间拆分DataFrame的无循环实现及存储方案咨询

问题解答

无循环拆分DataFrame的实现方式

直接使用Pandas内置的向量化操作即可完成,全程不需要手动写逐行判断的循环,实现非常优雅:

核心思路

先用pd.cut函数按照指定区间给ColB列打分组标签,再用groupby按标签分组,直接得到拆分后的子DataFrame。

代码实现

import pandas as pd

# 构造示例数据
data = {
    'Time': [1,2,3,4,5,6],
    'ColA': [100,105,107,106,104,103],
    'ColB': [1.1,3.2,7.7,2.4,5.2,6.9],
    'ColC': [500,600,550,750,950,450]
}
df = pd.DataFrame(data)

# 1、定义区间规则,和示例输出匹配的规则可写为bins=[1,3,5, float('inf')]
# 如果需要固定步长2的连续区间,可写为bins = range(1, int(df['ColB'].max()) + 2, 2)
bins = [1,3,5, float('inf')]

# 2、给每行打区间标签,right=False表示区间左闭右开,即[1,3)、[3,5),可按需调整
df['bin_label'] = pd.cut(df['ColB'], bins=bins, right=False)

# 3、拆分结果转列表,每个元素是对应区间的子DataFrame
df_list = [group.drop('bin_label', axis=1).reset_index(drop=True) for _, group in df.groupby('bin_label', sort=True)]

# 4、拆分结果转字典,key为区间标签,value为对应子DataFrame
df_dict = {label: group.drop('bin_label', axis=1).reset_index(drop=True) for label, group in df.groupby('bin_label', sort=True)}

上述实现所有核心逻辑都由Pandas底层的C语言运算完成,性能远高于手动写逐行判断循环的实现。

大数据集下列表与字典存储的效率对比

  • 内存占用:两种方式存储的子DataFrame默认都是源数据的视图,不会重复存储实际数据,唯一差异是字典需要额外存储区间标签作为key,整体内存开销差异极小。
  • 访问效率:
    • 如果后续需要按顺序遍历所有拆分后的子DataFrame,列表效率更高,不需要哈希计算,遍历速度更快。
    • 如果后续需要根据区间值随机查询某个特定区间的子DataFrame,字典效率更高,可以O(1)时间命中目标,列表遍历查找的时间复杂度为O(n)。
  • 选型建议:不需要按区间检索选列表,需要快速按区间查找选字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:03