根据输入返回熊猫分组依据

时间:2019-05-18 06:44:14

标签: python-3.x pandas pivot

我正在尝试根据用户输入显示不同的DataFrame。

我创建了一个脚本,要求用户输入: 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, '')

变量为tablegroup

根据用户对table(A,B或C)的输入,变量group也将发生变化并影响最终输出。

myscript.py失败,并显示以下错误: AttributeError: 'str' object has no attribute 'groupby',由于Python将用户输入解析为字符串,因此不会返回变量A,B和C(已在类函数WAP中定义)。

预期结果是myscript.py根据用户输入的ABC来打印出正确的表和组

编辑:添加字典并通过函数调用查找字典即可解决此问题

1 个答案:

答案 0 :(得分:1)

您需要添加if语句,例如 if table == 'A': table = A