动态创建条件以过滤数据帧

时间:2019-06-28 16:09:02

标签: python-3.x pandas

  

给出了两个数据框,一个是参数数据框,另一个是输入数据框。基本上,我们需要根据条件加入两个数据框。

import pandas as pd
import numpy as np

para_df=pd.DataFrame({'parameter': ['param1', 'param2', 'param3*param4', 'param5', 'param6*param7*param8'],
                    'level1': ['A1','A2','A3','A4','A5'],
                     'level2':[np.NaN,np.NaN,'B3',np.NaN,'B5'],
                     'level3':[np.NaN,np.NaN,np.NaN,np.NaN,'C6'],
                     'level4':[np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
                     'estimatation':[10,20,30,40,50]})

output of para_df

estimatation    level1  level2  level3  level4  parameter
10                 A1   NaN      NaN    NaN      param1
20                 A2   NaN      NaN    NaN      param2
30                 A3   B3       NaN    NaN      param3*param4
40                 A4   NaN      NaN    NaN      param5
50                 A5   B5       C6     NaN      param6*param7*param8


input_df=pd.DataFrame({'param1' : ['A1','A1','A1'],
                      'param2' : ['A2','A2','A2'],
                      'param3' : ['A3','A3','A3'],
                      'param4' : ['B3','B3','B3'],
                      'param5' : ['A4','A4','A4'],
                      'param6' : ['A5','A5','A5'],
                      'param7' : ['B5','B5','B5'],
                      'param8' : ['C6','C6','C6']})

output of input_df=
    param1  param2  param3  param4  param5  param6  param7  param8
      A1     A2       A3      B3      A4      A5      B5    C6
      A1     A2       A3      B3      A4      A5      B5    C6
      A1     A2       A3      B3      A4      A5      B5    C6


for _, row in para_df.iterrows():
    if '*' not in row['parameter']:
        input_df.loc[input_df[row['parameter']] == row['level1'],row['parameter']+'pe'] = row['estimatation']
    else:
        params = row['parameter'].split('*')
        print(params)
        conditions = ["input_df[row[{}] == row[{}]".format(params[i-1], 'level'+str(i)) for i in range(1, len(params)+1 )] 
        all_condition = "&".join(conditions)
        print(all_condition)
        input_df.loc[all_condition ,row['parameter']+'pe'] = row['estimatation']

  

我想基于all_condition获得输出。但是我无法获得预期的数据帧


param1  param2  param3  param4  param5  param6  param7  param8  param1pe    param2pe    param5pe    param3*param4pe param6*param7*param8pe
0   A1  A2  A3  B3  A4  A5  B5  C6  10.0    20.0    40.0    NaN NaN
1   A1  A2  A3  B3  A4  A5  B5  C6  10.0    20.0    40.0    NaN NaN
2   A1  A2  A3  B3  A4  A5  B5  C6  10.0    20.0    40.0    NaN NaN
input_df[row[param3] == row[level1]&input_df[row[param4] == row[level2] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 30.0    NaN
input_df[row[param6] == row[level1]&input_df[row[param7] == row[level2]&input_df[row[param8] == row[level3] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 50.0

0 个答案:

没有答案