根据复选框调用不同的函数

2024-10-03 23:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python和Streamlight来比较不同列上的数据帧,基本思想是我有一个5列的复选框,我想根据选中的框调用函数“data_matching”(传递给函数的参数是复选框)

对于第一种情况,一切正常,但对于第二种情况,我得到以下错误“name‘data_merge’未定义”。 我尝试将数据合并声明为全局,但问题仍然存在。我的问题是如何解决此问题?有没有更好的方法来做到这一点,因为有很多可能涵盖(25个案例涵盖我做了数学lol)

import streamlit as st
import pandas as pd 
import numpy as np 


def data_matching(atm_data, hist_data, cardNUM=False, transAMT=False, terminalID=False, externalST=False, transactionDATE=False):
    global data_merge
    if cardNUM and transAMT and terminalID and externalST and transactionDATE:
        data_merge = atm_data.merge(
            hist_data, on=['CARD_NUMBER', 'TRANSACTION_AMOUNT', 'TERMINAL_ID', 'EXTERNAL_STAN', 'TRANSACTION_DATE'], how='left', indicator='Match')
    if cardNUM == False and transAMT and terminalID and externalST and transactionDATE:
        data_merge = atm_data.merge(
            hist_data, on=['TRANSACTION_AMOUNT', 'TERMINAL_ID', 'EXTERNAL_STAN', 'TRANSACTION_DATE'], how='left', indicator='Match')
    if terminalID and externalST and transactionDATE:
        data_merge = atm_data.merge(
            hist_data, on=['TERMINAL_ID', 'EXTERNAL_STAN', 'TRANSACTION_DATE'], how='left', indicator='Match')
    if externalST and transactionDATE:
        data_merge = atm_data.merge(
            hist_data, on=['EXTERNAL_STAN', 'TRANSACTION_DATE'], how='left', indicator='Match')
    if transactionDATE:
        data_merge = atm_data.merge(
            hist_data, on=['TRANSACTION_DATE'], how='left', indicator='Match')

    data_merge['Match'] = data_merge['Match'] == 'both'
    # create a new column Match in dataframe A  and fill it from C
    atm_data["Match"] = data_merge['Match']
    return atm_data

if cardNUM and transAMT and terminalID and externalST and transactionDATE:
    atm_data = data_matching(atm_data, hist_data, cardNUM,
                             transAMT, terminalID, externalST, transactionDATE)
    st.write('Matching on all fields!')
    st.write(atm_data)

if transAMT and terminalID and externalST and transactionDATE:
    atm_data = data_matching(atm_data, hist_data,
                             transAMT, terminalID, externalST, transactionDATE)
    st.write(
        'Matching on TRANSACTION_AMOUNT, TERMINAL_ID, EXTERNAL_STAN, TRANSACTION_DATE')
    st.write(atm_data)
if terminalID and externalST and transactionDATE:
    st.write('Great!')
if externalST and transactionDATE:
    st.write('Great!')
if transactionDATE:
    st.write('Great!')

Tags: anddataifonmatchmergehistwrite