我是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
但是,我不能在数据框中获取两个以上的变量。我希望数据框在使用该函数时变得更大。
答案 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