创建自动数据提取/返回摘要数据帧的函数

2024-09-30 16:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,包含公司的每一笔销售。对于每个月,我都希望获得一个汇总数据框,其中包含客户的姓名、客户购买的数量以及他们在给定月份购买的总价值。目前,我正在为每个客户创建一个数据帧,并在最后连接所有数据帧,因此我的代码如下所示:

#"蒲公英数量"

Client2_April_NoPurchase = len(sells_data[(sells_data['Customer'] == 'Client2') & (sells_data['Month'] == 'Apr')])

#“采购总价值(美元)”

Client2_April_ValuePurchases = sells_data.loc[(sells_data['Customer'] == 'Client2') & (sells_data['Month'] == 'Apr'), 'Value of Purhcase (USD)'].sum()

#原始数据

Client2_Purchases_April_datadf = {'Customer': ['Client2'], 'Purchases (No.)': [(Client2_April_NoPurchase)], 'Value of Purhcase (USD)': [(Client2_April_ValuePurchases)]}

#数据帧

Client2_Purchases_April = pd.DataFrame(Client2_Purchases_April_datadf, columns = ['Customer', 'Purchases (No.)', 'Value of Purchases (USD)'])

我为每个客户机重复这段代码,这使得我的工具非常“手动”。有没有办法“自动化”这段代码?我曾想过创建一个函数,但我尝试过的所有函数都不起作用。还请注意,一些客户具有其他货币的购买价值(澳元、加元等),一些客户同时具有多种货币的购买价值(美元和加元等)

数据集示例(销售数据): enter image description here


Tags: of数据代码data数量客户valuecustomer
1条回答
网友
1楼 · 发布于 2024-09-30 16:30:43

以下是数据帧的可复制版本:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'customer' : ['Client1', 'Client2', 'Client2', 'Client3', 'Client1', 'Client2'],
    'date' : ['08/04/2020', '14/04/2020', '14/04/2020', '15/04/2020', '14/04/2020', '14/04/2020'],
    'value_usd' : [50, 300, 20, np.nan, 95, 30],
    'value_gbp' : [np.nan, np.nan, np.nan, 20, np.nan, np.nan],
    'value_eur' : [np.nan, np.nan, np.nan, np.nan, 10, np.nan],
    'value_hkd' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
    'value_cad' : [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
})

使用groupby您现在可以通过多种方式按客户机聚合数据。这一行对条目进行计数:

df.groupby(['customer']).agg(['count'])

          date value_usd value_gbp value_eur value_hkd value_cad
         count     count     count     count     count     count
customer                                                        
Client1      2         2         0         1         0         0
Client2      3         3         0         0         0         0
Client3      1         0         1         0         0         0
``

相关问题 更多 >