如何基于DataFrame列中含列名的公式计算生成新列?
解决方法
要实现这个需求,我们可以利用Python的eval()函数结合pandas的apply()方法,逐行解析并执行col3中的计算公式:
完整代码示例
import pandas as pd # 创建初始DataFrame df = pd.DataFrame({ 'col1': [1,3,5,7], 'col2': [2,4,6,8], 'col3': ['(col1*(1+col2))*col1','col1+col2','col1/col2','col1-col2'] }) # 计算col4:逐行执行col3的公式 df['col4'] = df.apply(lambda row: eval(row['col3'], globals(), row.to_dict()), axis=1) # 格式化col4为两位小数,匹配预期输出 df['col4'] = df['col4'].round(2) print(df)
执行结果
col1 col2 col3 col4 0 1 2 (col1*(1+col2))*col1 3.00 1 3 4 col1+col2 7.00 2 5 6 col1/col2 0.83 3 7 8 col1-col2 -1.00
原理说明
apply(axis=1):遍历DataFrame的每一行row.to_dict():把当前行的列名和值转为字典,作为eval()的局部命名空间,这样公式里的col1、col2会直接取当前行对应的值round(2):将计算结果保留两位小数,和预期输出的格式对齐
注意:eval()会执行传入的字符串代码,若col3中包含不可信内容,存在安全风险,仅在数据来源可控时使用。
内容的提问来源于stack exchange,提问作者bakas
相关产品推荐
相关产品推荐

