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

如何在Python DataFrame中拼接字符串与变量调用列并生成区间标记列

问题与解决方案

问题描述

假设存在如下结构的Pandas DataFrame:

IDWeightLR WeightUR WeightAgeLS AgeUS AgeHeightLS HeightUS Height
1635080201821165160175
2755080221821172160170
3494580171821180160180

需要新增标记列,规则是:若主变量(Weight/Age/Height)的值落在对应上下限区间内(下限≤值≤上限),标记列值为1,否则为0。最终结果如下:

IDFlag_WeightFlag_AgeFlag_Height
1111
2100
3101

同时需要了解:在Pandas DataFrame中,如何通过字符串与变量拼接的方式调用列。

解决方案

1. 实现标记列的生成

先构造示例DataFrame,再通过循环遍历主变量,动态匹配对应上下限列生成标记:

import pandas as pd

# 构造示例DataFrame
data = {
    "ID": [1,2,3],
    "Weight": [63,75,49],
    "LR Weight": [50,50,45],
    "UR Weight": [80,80,80],
    "Age": [20,22,17],
    "LS Age": [18,18,18],
    "US Age": [21,21,21],
    "Height": [165,172,180],
    "LS Height": [160,160,160],
    "US Height": [175,170,180]
}
df = pd.DataFrame(data)

# 定义主变量与对应上下限前缀的映射
var_bound_prefix = {
    "Weight": ("LR", "UR"),
    "Age": ("LS", "US"),
    "Height": ("LS", "US")
}

# 循环生成标记列
for var, (lower_prefix, upper_prefix) in var_bound_prefix.items():
    # 拼接上下限列名
    lower_col = f"{lower_prefix} {var}"
    upper_col = f"{upper_prefix} {var}"
    # 判断区间并生成标记值
    df[f"Flag_{var}"] = df.apply(
        lambda row: 1 if (row[lower_col] <= row[var] <= row[upper_col]) else 0,
        axis=1
    )

# 输出目标结果
print(df[["ID", "Flag_Weight", "Flag_Age", "Flag_Height"]])

这种方式可直接扩展到更多主变量和不同前缀的上下限列,无需重复编写判断逻辑。

2. 字符串与变量拼接调用列的方法

在Pandas中,常用两种方式实现字符串拼接调用列:

  • 字符串格式化拼接列名:如上述代码中的f"{lower_prefix} {var}",生成列名字符串后,通过df[列名字符串]即可访问对应列,这是最通用的方式,适配带空格的列名。
  • getattr方法:若列名无空格,可使用getattr(df, 列名字符串),例如getattr(df, "Weight")等价于df["Weight"]。

如果需要批量处理列,还可以用列表推导式生成目标列名列表,再批量选取:

# 生成所有包含"Weight"的列名
weight_cols = [col for col in df.columns if "Weight" in col]
# 批量选取这些列
weight_subset = df[weight_cols]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:40:19