如何按连续浮点型X值区间拆分pandas DataFrame生成对应子表
按X列数值区间拆分DataFrame的实现方法
实现这个需求有两种常用方案,都不需要绘图,纯pandas操作即可:
方案1:少量区间直接用布尔索引
如果你的区间数量不多,可以直接通过条件筛选生成对应子表:
# 先定义你需要的区间边界 bins = [2000, 2300, 2800, 3500] # 按左闭右开规则筛选,可根据需求调整大于/小于的等于条件 df_1 = df[(df['X'] >= bins[0]) & (df['X'] < bins[1])] df_2 = df[(df['X'] >= bins[1]) & (df['X'] < bins[2])] df_3 = df[(df['X'] >= bins[2]) & (df['X'] < bins[3])]
方案2:多区间批量生成(推荐)
如果区间数量多,用pd.cut打标签+分组的方式效率更高,还能避免重复写筛选逻辑:
import pandas as pd # 1. 配置区间规则 # 自定义区间边界,末尾加float('inf')可自动匹配所有超过3500的数值 bins = [2000, 2300, 2800, 3500, float('inf')] # 每个区间对应的标签,和你需要的子表命名对应 labels = ['df_1', 'df_2', 'df_3', 'df_over_3500'] # 2. 给每行打区间标签 # right=False代表区间为左闭右开,设置为True则是左开右闭,可按需调整 df['range_tag'] = pd.cut(df['X'], bins=bins, labels=labels, right=False) # 3. 批量生成所有子表,存入字典,调用时直接取dfs['df_1']即可得到对应子表 dfs = dict(tuple(df.groupby('range_tag'))) # 如果需要单独赋值为变量,加这一步即可 df_1, df_2, df_3, df_over_3500 = dfs.values()
补充说明
- 如果你不想修改原DataFrame,可直接把
pd.cut的结果传给groupby,无需新增标签列:
dfs = dict(tuple(df.groupby(pd.cut(df['X'], bins=bins, labels=labels, right=False))))
- 如果需要按分位数自动拆分区间,不用手动定义bins,直接用
pd.qcut即可:
# 示例:按X列的四分位拆分4个子表 dfs = dict(tuple(df.groupby(pd.qcut(df['X'], q=4, labels=['df_1','df_2','df_3','df_4']))))
内容的提问来源于stack exchange,提问作者Panya Siri
相关产品推荐
相关产品推荐

