python - 求解多个参数的方程/表达式
问题描述
我有以下数据框:
ID Model_form A C Actual
1 Exp 2 1.4 4
2 Power model 1 0.2 3
3 Log 0.6 6 7
我正在尝试根据模型形式求解不同的方程:
If model form column contains 'exp' - A*(1-exp(C*actual))
If model form column contains 'pow' - A*(actual^C)
If model form column contains 'log' - A* Ln(1+C*optimal)
目前我正在解决这个问题,如下所示,
c1 = df['Model_form']].str.contains('exp', flags = re.IGNORECASE)
c2 = df['Model_form']].str.contains('pow', flags = re.IGNORECASE)
c3 = df['Model_form']].str.contains('log', flags = re.IGNORECASE)
df['Actual(y)'] = np.select([c1,c2,c3], [df.eval(df['A']*(1-
np.exp(df['C']*df['Actual'])),df['A']*
(df['Actual']**df['C']),df['A']*np.log(1+df['C']*df['Actual']))])
我得到错误:
eval() takes from 2 to 3 positional arguments but 4 were given
解决方案
c1 = df['Model_form'].str.contains('exp', flags = re.IGNORECASE)
c2 = df['Model_form'].str.contains('pow', flags = re.IGNORECASE)
c3 = df['Model_form'].str.contains('log', flags = re.IGNORECASE)
labels=[df.eval(df['A']*(1-np.exp(df['C']*df['Actual']))),df.eval("A*(Actual**C)"),df.eval(df['A']*np.log(1+df['C']*df['Actual']))]
最后:
df['Actual(y)']=np.select([c1,c2,c3],labels)
df的输出:
ID Model_form A C Actual Actual(y)
0 1 Exp 2.0 1.44 4 -632.696658
1 2 Power model 1.0 0.20 3.0 1.245731
2 3 Log 0.6 6.00 7.0 2.256720
注意:在第一个和第三个条件下使用是没有意义的,df.eval()
因为单独df['A']*(1-np.exp(df['C']*df['Actual']))
并且df['A']*np.log(1+df['C']*df['Actual'])
给你你想要的输出并且df.eval()
什么都不做(除了条件 2)!
您收到此错误:
eval() takes from 2 to 3rd positional arguments but 4 were given
由于第一个条件中缺少括号)
:
df.eval(df['A']*(1-np.exp(df['C']*df['Actual'])))
^
#added ) parenthesis
推荐阅读
- javascript - 导航栏切换按钮在切换类(“活动”)上不起作用;
- vector - 如何获取对 Vec 中元素的多个可变引用?
- android-studio - AndroidStudio - 如何使用 uri 将 SharedPreferences 文件从实习生复制到外部存储?
- c# - 是否可以基于 XSD 方案反序列化 xml 而不是粘贴特殊的结果?
- c++ - 如果将数组作为指向函数的指针传递,我会得到“系统资源不足,无法完成请求的服务”
- java - Gradle 多模块 Kotlin 应用程序给出主类未找到错误
- mysql - MySQL - 存储一长串项目
- ruby-on-rails - 浏览器和登录到我的 Rails 应用程序之间的会话问题不一致
- javascript - 从 d3 v3 转换为 v6 的龙卷风图
- c# - 如何在 C# 中为 Google AutoML 获取 OAuth 2.0 身份验证承载令牌?