Python DataFrame操作:生成区间数值列表及提取flag=1的区间值
Python DataFrame 数值区间相关问题解答
1. 生成两个数值之间的数值列表
根据场景不同,有两种常见实现方式:
单组数值生成区间
如果是已知单个最小值和最大值,直接用range()生成(注意range是左闭右开,所以最大值需要+1):
min_num = 1 max_num = 9 num_list = list(range(min_num, max_num + 1)) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
DataFrame多行批量生成区间
如果DataFrame中每行都有min_val和max_val列,用apply遍历每行生成对应区间:
import pandas as pd df = pd.DataFrame({'min_val': [1, 16], 'max_val': [9, 25]}) df['num_range'] = df.apply(lambda row: list(range(row['min_val'], row['max_val'] + 1)), axis=1) # 生成的df会新增num_range列,每行对应一个区间列表
2. 提取flag=1分组的数值区间并合并为筛选列表
按照需求,步骤如下:筛选flag为1的行 → 遍历生成每个区间的数值 → 合并为最终列表:
代码实现
import pandas as pd # 模拟你的结果集(替换为实际DataFrame) df = pd.DataFrame({ 'flag': [1, 0, 1], 'min_val': [1, 10, 16], 'max_val': [9, 15, 25] }) # 1. 筛选flag=1的行 filtered_rows = df[df['flag'] == 1] # 2. 遍历生成所有区间数值并合并 result = [] for _, row in filtered_rows.iterrows(): result.extend(range(row['min_val'], row['max_val'] + 1)) # 3. 排序(若有重叠区间可先去重) result = sorted(result) print(result) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
简洁写法(列表推导式)
result = sorted([num for _, row in filtered_rows.iterrows() for num in range(row['min_val'], row['max_val'] + 1)])
内容的提问来源于stack exchange,提问作者ayyyran
相关产品推荐
相关产品推荐

