每次我运行该函数时如何更新数据框?

时间:2019-02-07 15:10:38

标签: python pandas dataframe

我是Python的新手,因此无法在SO中找到可以回答我问题的线程。我有一个自己定义的函数,该函数计算每种产品的顾问和客户数量。

这是功能

def countTrigger():
    statistics = pd.DataFrame(
            data = {'Date': [datetime.datetime.now().strftime("%Y-%m-%d")], 
                    'Product': [input()],
                    'Advisor': [len(set(df['Advisor id']))],
                    'Customers': [df.shape[0]]}) 
    global df
    df = pd.DataFrame(statistics)
    return df

df是具有所有客户和顾问的数据框。每当有包含新产品的新列表时,df就会是我导入到Python中的Excel工作表。

首先,我运行一次countTrigger(),然后将Product A写入控制台,然后第二次运行countTrigger(),并使用Product B进入控制台。

我希望输出看起来像这样,每当我运行countTrigger()时,都会有一个带有新统计信息的新行。是否还可以从左上角删除Product A

Product A
         Date    Product  Advisors  Customers
0  2019-02-07  Product A        30        175
1  2019-02-07  Product B        40        180

换句话说,每次运行函数statistics时如何更新数据帧countTrigger()

非常感谢

编辑:我现在添加了:

global df
df = pd.DataFrame(statistics)
return df

但是,我不能在数据框中获取两个以上的变量。我希望数据框在使用该函数时变得更大。

1 个答案:

答案 0 :(得分:1)

您应该避免每次在函数内部创建DataFrame,否则,您将在任何函数调用时覆盖它。相反,请先创建DataFrame并使用该函数将新数据简单地添加到其中。

def update():
    global stat_df
    data = {'Date': datetime.datetime.now().strftime("%Y-%m-%d"),
            'Product': input(),
            'Advisor': 'Mr.X',
            'Customers': 1}
    stat_df = stat_df.append(data, ignore_index=True)


##Init the DataFrame
data = {'Date': [],
        'Product': [],
        'Advisor': [],
        'Customers': []}
stat_df = pd.DataFrame(data=data)


##Update the DataFrame
update()
print(stat_df)

update()
print(stat_df)

update()
print(stat_df, '\n')

输出为:

asd
         Date Product Advisor  Customers
0  2019-02-08     asd    Mr.X        1.0 

asda
         Date Product Advisor  Customers
0  2019-02-08     asd    Mr.X        1.0
1  2019-02-08    asda    Mr.X        1.0 

asdasd
         Date Product Advisor  Customers
0  2019-02-08     asd    Mr.X        1.0
1  2019-02-08    asda    Mr.X        1.0
2  2019-02-08  asdasd    Mr.X        1.0