【问题标题】:Substituting variable in a dataframe row based on other row's value根据其他行的值替换数据框行中的变量
【发布时间】:2021-07-24 03:57:00
【问题描述】:

我有一个包含 ID、公式和从属 ID 列的数据框,我从公式列中提取了 ID。 现在我必须根据数据框将所有依赖 ID 替换为公式。

我的方法是为每一行运行一个嵌套循环,以使用替换函数替换公式中的依赖 ID。循环将停止,直到没有更多可能的替换。但是我不知道从哪里开始,也不确定这是否是正确的方法。

我想知道是否有任何功能可以使过程更容易?

这里是创建当前数据框的代码:

data = pd.DataFrame({'ID':['A1','A3','B2','C2','D3','E3'],
    'Formula':['C2/500','If B2 >10 then  (B2*D3) + 100 else D3+10','E3/2 +20','E3/2 +20','var_i','var_x'],
    'Dependent ID':['C2','B2, D3','E3','D3, E3', '','']})

以下是我当前数据框的示例和我想要的最终结果。 当前数据框:

希望最终结果:

【问题讨论】:

  • 你必须编写代码来生成数据帧吗?
  • 让我现在就做。感谢您查看问题
  • 添加了创建数据框的代码
  • 哦,是的,你是对的,让我更正一下

标签: python pandas variable-substitution


【解决方案1】:

用公式递归替换公式中的依赖ID:

df = pd.DataFrame({'ID':['A1','A3','B2','C2','D3','E3'],
    'Formula':['C2/500','If B2 >10 then  (B2*D3) + 100 else D3+10','E3/2 +20','D3+E3','var_i','var_x'],
    'Dependent ID':['C2','B2,D3','E3','D3,E3', '','']})

def find_formula(formula:str, ids:str):
    #replace all the ids inside formula with the correct formula
    if ids == '':
        return formula
    ids = ids.split(',')
    for x in ids:
        sub_formula = df.loc[df['ID']==x, 'Formula'].values[0]
        sub_id = df.loc[df['ID']==x, 'Dependent ID'].values[0]
        formula = formula.replace(x, find_formula(sub_formula, sub_id))
    return formula

df['new_formula']=df.apply(lambda x: find_formula(x['Formula'], x['Dependent ID']), axis=1)

输出:

ID  Formula Dependent ID    new_formula
0   A1  C2/500      C2      var_i+var_x/500
1   A3  If B2 >10 then (B2*D3) + ...    If var_x/2 +20 >10 then (var_x/2 +20*var_i) + ...
2   B2  E3/2 +20    E3      var_x/2 +20
3   C2  D3+E3       D3,E3   var_i+var_x
4   D3  var_i               var_i
5   E3  var_x               var_x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多