Возврат панд группового на основе ввода - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь отобразить разные фреймы данных в зависимости от ввода пользователя.

Я создал скрипт, запрашивающий ввод пользователя: myscript.py

import libs.mssql as mssql

db = mssql.Database()

table_name = input("Please key in A, B or C: ")

table = db.WAP(table_name)
print(table)

input("Press Enter to exit.")

Скрипт должен распечататьвывод на основе приведенной ниже функции класса:

class Database():
    def __init__(self):
        self.cnxn = pyodbc.connect(cnxn details)

    def WAP(self, table_name):
        sql = "EXECUTE Contract_Balance"
        df = pd.read_sql(sql, self.cnxn)

        A_filter = (df.Table_Name == 'A')
        B_filter = (df.Table_Name == 'B') & (df.Product != 'C')
        C_filter = (df.Table_Name == 'C') & (df.Product == 'C')

        # Copy from df based on filters

        A = df[A_filter].copy()
        B = df[B_filter].copy()
        C = df[C_filter].copy()

        myDict = {"A": A, "B": B, "C": C} 

        if table_name in ('A', 'C'):
            table = myDict[table_name]
            group = ['Delivery', 'Product']

        elif table_name == 'B':
            table = myDict[table_name]
            group = ['Delivery', 'Region']

        return np.round(
            table.groupby(group).\
            apply(lambda x: pd.Series([np.average(x.Product_Price, weights=x.Balance),x.Balance.sum()],index=['Product_Price', 'Balance'])).\
            unstack().\
            swaplevel(1,0,axis=1).\
            sort_index(axis=1).\
            replace(np.nan, 0) 
        , 2).replace(0, '')

Переменные: table и group.

На основании ввода пользователя для table (A, B или C)переменная group также изменится и повлияет на конечный вывод.

myscript.py завершится неудачно с ошибкой: AttributeError: 'str' object has no attribute 'groupby', из-за того, что Python анализирует ввод пользователя как строку, поэтому переменные A,B и C (которые были определены в функции класса WAP) не возвращаются.

Ожидаемый результат состоит в том, что myscript.py выводит правильную таблицу и группу на основе пользовательского ввода A,B или C

Редактировать: добавить словарь и поиск его с помощью вызова функции решает эту проблему

1 Ответ

1 голос
/ 18 мая 2019

Вы должны добавить, если заявления как if table == 'A': table = A

...