Я пытаюсь сделать sql оператор CASE, используя значение dataframe. Можете ли вы помочь мне, как это сделать?
Мне нужно сделать заявление в соответствии со значениями dataframe. Не могли бы вы помочь мне?
пример:
DATAFRAME
rule_id operator_type input_value output_value and_or_not_operator out_expr_type
R120 = Canada PQC Canada Global Complaint PQC NULL NULL
R120 = PQC US Global Complaint PQC NULL NULL
R120 = Adverse Event US Global Complaint PQC AND NULL
R120 = Canada AE Canada Global Complaint AE NULL NULL
R120 LIKE Global Comp NULL AND rec.recordtype_nm||'AE'
R120 = Y NULL AND rec.recordtype_nm||'AE'
R120 = N NULL AND rec.recordtype_nm||'AE'
R120 = Initial NULL NULL rec.recordtype_nm||'AE'
R120 ELSE NULL NULL NULL NULL
Final Case Statement:
CASE WHEN = 'Canada PQC' then 'Canada Global Complaint PQC' WHEN = 'PQC' then 'US Global Complaint PQC' WHEN = 'Adverse Event' AND = 'Canada AE' then 'Canada Global Complaint AE' WHEN LIKE '%Global Complaint%' AND = 'Y' AND = 'N' AND = 'Initial' then rec.recordtype_nm||' AE ' ELSE then REC.RECORDTYPE_NM END
Код, который я пытаюсь:
conn = redshift_conn()
order = 'priority_order'
rule_id1 = "'" + rule_id + "'"
case_stmnt = 'CASE'
df_metadata = pd.read_csv("/medaff/Scripts/python/imedical_business_rules_metadata.txt", delimiter= '~')
with conn.cursor() as cur:
print('select * from medaff.imedical_business_rules_metadata where rule_id = {} order by priority_order'.format(rule_id1))
query = ('select * from medaff.imedical_business_rules_metadata where rule_id = {} order by priority_order'.format(rule_id1))
cur.execute(query)
res = cur.fetchall()
print(type(res))
#print(res)
column_names = [i[0] for i in cur.description]
print(column_names)
df = pd.DataFrame(res, columns=column_names)
print(df)
for index, row in df.iterrows():
if df['priority_order'] == 1.0:
if df['and_or_not_oprtor'] == 'NULL' and df['operator_type'] = '=':
case_stmnt += 'WHEN ' + "'" + row['operator_type'] + "'" + 'THEN' + "'" + row['output_value'] + "'"