Python实现DataFrame中Value列值分配至UpperBound与LowerBound列
DataFrame区间匹配与填充实现方案
需求说明
原始DataFrame结构(包含ID、Value、UpperBound、LowerBound四列):
ID | Value | UpperBound | LowerBound 1 23 NaN NaN 2 55 NaN NaN 3 87 NaN NaN 4 99 NaN NaN 5 NaN 50 5 6 NaN 5 1 7 NaN 95 50 8 NaN 99 95
需根据指定区间(1-5、5-50、50-95、95-99),将Value列非空值匹配到对应上下界并填充至UpperBound和LowerBound列,最终将Value列全部置为NaN,期望输出如下:
ID | Value | UpperBound | LowerBound 1 NaN 50 5 2 NaN 95 50 3 NaN 95 50 4 NaN 99 95 5 NaN 50 5 6 NaN 5 1 7 NaN 95 50 8 NaN 99 95
Python实现代码
import pandas as pd import numpy as np # 构造原始DataFrame data = { 'ID': [1, 2, 3, 4, 5, 6, 7, 8], 'Value': [23, 55, 87, 99, np.nan, np.nan, np.nan, np.nan], 'UpperBound': [np.nan, np.nan, np.nan, np.nan, 50, 5, 95, 99], 'LowerBound': [np.nan, np.nan, np.nan, np.nan, 5, 1, 50, 95] } df = pd.DataFrame(data) # 定义指定区间:(下界, 上界) intervals = [(1, 5), (5, 50), (50, 95), (95, 99)] # 遍历区间,匹配并填充上下界 for lower, upper in intervals: # 筛选Value非空且落在当前区间内的行(示例中99匹配95-99区间,故用<=upper) mask = df['Value'].notna() & (df['Value'] > lower) & (df['Value'] <= upper) df.loc[mask, ['LowerBound', 'UpperBound']] = [lower, upper] # 将Value列全部置为NaN df['Value'] = np.nan # 打印结果 print(df)
代码说明
- 构造与样本一致的原始DataFrame;
- 定义需求中的区间集合,每个区间以(下界, 上界)元组形式存储;
- 遍历每个区间,通过布尔掩码筛选出符合条件的行,批量填充对应的LowerBound和UpperBound;
- 最后统一将Value列设置为NaN,完成需求。
内容的提问来源于stack exchange,提问作者Sara Silva
相关产品推荐
相关产品推荐

