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

Python函数中如何获取逻辑变量名而非值更新DataFrame列

解决方法

核心思路是显式传入逻辑名称,避免依赖复杂且不可靠的变量名自动获取逻辑,推荐以下两种简洁实用的方案:

方案1:使用配置列表传递逻辑与对应参数

直接定义包含逻辑名称、判断条件、Value列取值的配置列表,函数遍历列表完成批量更新:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'col1': [10, 20, 30, 40],
    'col2': [5, 15, 25, 35],
    'Change': ['']*4,
    'Value': [0]*4
})

# 定义判断逻辑
logic1 = df['col1'] > 20
logic2 = df['col2'] < 10

def update_change_value(df, logic_configs):
    for config in logic_configs:
        mask = config['condition']
        df.loc[mask, 'Change'] = config['name']
        df.loc[mask, 'Value'] = config['value']

# 调用函数:传入包含所有逻辑配置的列表
logic_configs = [
    {'name': 'logic1', 'condition': logic1, 'value': df['col1'] * 0.5},
    {'name': 'logic2', 'condition': logic2, 'value': df['col2'] + 10}
]
update_change_value(df, logic_configs)

print(df)

方案2:使用字典映射逻辑名称与参数

用字典的键存储逻辑名称,值存储(判断条件, Value取值)的元组,函数遍历字典完成更新:

def update_change_value(df, logic_map):
    for logic_name, (condition, value) in logic_map.items():
        mask = condition
        df.loc[mask, 'Change'] = logic_name
        df.loc[mask, 'Value'] = value

# 调用函数:传入逻辑映射字典
logic_map = {
    'logic1': (logic1, df['col1'] * 0.5),
    'logic2': (logic2, df['col2'] + 10)
}
update_change_value(df, logic_map)

备选:自动获取变量名(不推荐)

如果一定要自动获取变量名,可以用inspect模块实现,但这种方法存在局限性(无法识别表达式、多变量指向同一对象时会出错),仅作参考:

import inspect

def get_logic_name(condition):
    caller_vars = inspect.currentframe().f_back.f_locals.items()
    for name, val in caller_vars:
        if val is condition:
            return name
    return None

def update_change_value(df, *conditions):
    for cond in conditions:
        logic_name = get_logic_name(cond)
        if logic_name:
            df.loc[cond, 'Change'] = logic_name
            # 自行定义Value列的取值逻辑,比如对应某列的值
            df.loc[cond, 'Value'] = df.loc[cond, 'col1']

# 调用函数:直接传入逻辑变量
update_change_value(df, logic1, logic2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:37:37