首页 > 解决方案 > 每次运行函数时如何更新数据框?

问题描述

我是 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 中。

首先我运行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

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

标签: pythonpandasdataframe

解决方案


您应该避免每次在函数内部创建 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 

推荐阅读