我有一个数据框:
Model A C
Neg Exp 3 2
Power Model 2 1
Log 2 7
我想根据模型列对这些执行一些方程。
如果Model列包含exp,执行A+C 如果 Model 列包含 pow,则执行 A*C 如果模型列包含,记录,执行 A-C
预期输出
Model A C Result
Neg Exp 3 2 5
Power Model 2 1 2
Log 2 7 -5
答案 0 :(得分:1)
尝试使用 contains
和 np.select
import re
c1 = df.Model.str.contains('exp',flags = re.IGNORECASE)
c2 = df.Model.str.contains('pow',flags = re.IGNORECASE)
c3 = df.Model.str.contains('log',flags = re.IGNORECASE)
df['new'] = np.select([c1,c2,c3], [df.eval('A+C'),df.eval('A*C'),df.eval('A-C')])
df
Out[186]:
Model A C new
0 NegExp 3 2 5
1 PowerModel 2 1 2
2 Log 2 7 -5
答案 1 :(得分:0)
使用 df.apply(..., axis=1)
函数,您可以将整行移交给定义的函数并计算所需的输出。尽管不如其他解决方案优雅,但我认为它更具可扩展性。
data = [{"Model":"Neg Exp","A": 3,"C": 2},
{"Model":"Power Model","A": 2,"C": 1},
{"Model":"Log","A": 2,"C": 7}]
import pandas as pd
df = pd.DataFrame(data)
def conditional_apply(row):
if row["Model"].lower().find("exp") >= 0:
return row["A"]+ row["C"]
elif row["Model"].lower().find("pow") >= 0:
return row["A"]* row["C"]
elif row["Model"].lower().find("log") >= 0:
return row["A"]- row["C"]
df["Result"] = df.apply(lambda row: conditional_apply(row), axis=1)
结果:
df
Out[87]:
Model A C Result
0 Neg Exp 3 2 5
1 Power Model 2 1 2
2 Log 2 7 -5
编辑:
conditional_apply
def conditional_apply(row):
model, A, C = row["Model"].lower(), row["A"], row["C"]
if model.find("exp") >= 0:
return A+ C
elif model.find("pow") >= 0:
return A* C
elif model.find("log") >= 0:
return A- C