修改函数以基于DataFrame列值生成带NumTrans后缀的表达式
没问题!我来帮你调整这个函数,完美匹配你的需求~
解决方案
1. 先准备可复现的示例DataFrame
首先咱们先把你提到的示例DataFrame用代码复现出来:
import pandas as pd # 可复现的示例DataFrame df = pd.DataFrame({ 'ID': ['12345', '12345', '67890', '67890'], 'NumTrans': ['1->2', '2->3', '3->1', '1->3'], 'Cov1': [0.5, 0.7, 0.3, 0.6], 'Cov2': [1.2, 0.9, 1.5, 0.8] })
2. 修改后的目标函数
我基于你描述的原函数逻辑,调整了表达式生成的部分,把*x和*y替换成了带NumTrans后缀的格式:
def func(df): # 按ID分组,为每个ID生成对应的exp表达式 return df.groupby('ID').apply( lambda group: f"exp({'+'.join([f'{row.Cov1}*x_{row.NumTrans} + {row.Cov2}*y_{row.NumTrans}' for _, row in group.iterrows()])})" ).reset_index(name='expression')
3. 关键修改点说明
- 核心调整就在表达式的f-string里:把原来的
*x改成了*x_{row.NumTrans},*y改成了*y_{row.NumTrans},这样每个转移状态(比如1->2)就会自动嵌入到变量名中 - 保留了原函数按ID分组的逻辑,同一个ID的所有转移项会用
+连接,包裹在exp()内部
4. 测试效果
调用func(df)后,会得到如下结果:
ID expression 0 12345 exp(0.5*x_1->2 + 1.2*y_1->2 + 0.7*x_2->3 + 0.9*y_2->3) 1 67890 exp(0.3*x_3->1 + 1.5*y_3->1 + 0.6*x_1->3 + 0.8*y_1->3)
这样就完全满足你的需求啦~
内容的提问来源于stack exchange,提问作者Arrebimbomalho
相关产品推荐
相关产品推荐

