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

如何避免Pandas中遍历公式列表的for循环?需调用行级函数

如何避免遍历公式列表的for循环并保留行级函数处理?

当然可以避免显式的for循环,以下是两种简洁的实现方式,同时保留行级函数处理的逻辑:

方法1:字典推导式 + assign批量添加列

通过字典推导式一次性生成所有需要的新列,再用assign()方法批量合并到原DataFrame:

import pandas as pd

def calculate(x, formula):
    return eval(formula)

col = {
    's1':{'l':100, 'w':200}, 
    's2':{'l':200, 'w':400}, 
    's3':{'l':300, 'w':500}
}

coldf = pd.DataFrame.from_dict(col, orient='index')

formulacol = [{'key':'a', 'formula':"x['l']*x['w']"},{'key':'p', 'formula':"x['l']+x['w']+x['l']+x['w']"}]

# 用字典推导式构建所有新列,再批量添加
new_columns = {
    item['key']: coldf.apply(lambda x: calculate(x, item['formula']), axis=1)
    for item in formulacol
}
coldf = coldf.assign(**new_columns)

print(coldf)

方法2:单apply生成多列并join

自定义一个行处理函数,一次性返回所有新列的结果,再通过join()合并到原DataFrame:

import pandas as pd

def calculate(x, formula):
    return eval(formula)

col = {
    's1':{'l':100, 'w':200}, 
    's2':{'l':200, 'w':400}, 
    's3':{'l':300, 'w':500}
}

coldf = pd.DataFrame.from_dict(col, orient='index')

formulacol = [{'key':'a', 'formula':"x['l']*x['w']"},{'key':'p', 'formula':"x['l']+x['w']+x['l']+x['w']"}]

# 单apply生成包含所有新列的Series
def process_row(x):
    return pd.Series({
        item['key']: calculate(x, item['formula'])
        for item in formulacol
    })

coldf = coldf.join(coldf.apply(process_row, axis=1))

print(coldf)

注意事项

这两种方式只是去掉了代码中的显式for循环,内部仍会处理每个公式,但代码结构更贴合pandas的风格。另外,eval()存在安全风险,如果公式来自不可信来源,建议改用AST模块解析公式逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:03:30