python - 创建一个函数来自动提取数据/返回一个汇总的数据框
问题描述
我有一个数据集,其中包含公司所做的每一次销售。对于每个月,我都想获得一个汇总数据框,其中包含客户姓名、客户购买的数量以及他们在给定月份的购买总价值。目前,我通过为每个客户创建一个数据框并在最后加入所有数据框来做到这一点,所以我的代码看起来像这样:
#'不。Pucharses 的
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)'])
我为每个客户重复此代码,这使我的工具非常“手动”。有没有办法“自动化”这段代码?我想创建一个功能,但我尝试过的所有功能都没有奏效。另请注意,有些客户有其他货币(澳元、加元等)的购买价值,有些客户同时拥有多种货币的购买价值(美元和加元等)。
数据集示例 (sells_data): 在此处输入图像描述
解决方案
这是您的数据框的可重现版本:
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
``
推荐阅读
- linux - 如何编写输出具有两个对应变量的表的脚本?
- json - 如何访问特定 json 键的索引
- java - 认证成功后的 Spring Security 返回 403
- laravel - 将 .composer/vendor/bin 永久附加到 $PATH:$HOME
- javascript - 电话号码和帐号的自定义格式
- python-3.x - 重新格式化以获得 Python 中的帮助。错误在体内
- r - 如何使很长的代码行在 R 中可读?
- excel - 折叠具有重复出现/名称的数据透视字段
- react-native - 如何在不失去对 ReactNative 的关注的情况下关闭键盘。(至少显示光标)
- git - GitLab CI - 尝试使用 docker buildx 为 ARM64 构建