在这里插入图片描述

题目:

你在一家跨国零售公司工作,全球各分公司的销售数据都存储在不同的表格中。当前的数据结构在业务分析中表现低效,管理层需要你提供专业知识来简化数据。

编写一个Python程序,创建一个数据表,显示每个分支机构每年的总销售额。

注意:假设销售额用 total_sales 列表示,单位为美元。每个分支机构由其唯一的 branch_id 表示。

示例:

输入:
为了简化,考虑两年:2021年和2022年。

import pandas as pd

data_2021 = {
    'id': [1, 2, 3, 4],
    'branch_id': [101, 102, 101, 103],
    'total_sales': [5000, 7000, 3000, 1000]
}

data_2022 = {
    'id': [1, 2, 3, 4],
    'branch_id': [101, 102, 103, 104],
    'total_sales': [6000, 8000, 2000, 4000]
}

df_2021 = pd.DataFrame(data_2021)
df_2022 = pd.DataFrame(data_2022)

输出:

sales_pivot 表:

列名 类型
branch_id INTEGER
total_sales_2021 INTEGER
total_sales_2022 INTEGER

该数据表显示了每个分支机构每年的总销售额。

答案

解题思路

要在Python中创建数据表,我们可以使用pandas库。具体步骤如下:

  1. 2021年和2022年的销售数据表中读取数据。
  2. 使用groupbysum来计算每个分支机构每年的总销售额。
  3. 将两个年份的数据合并在一起,创建一个数据表。

答案代码

def cal(df_2021,df_2022):
    # 创建DataFrame
    df_2021 = pd.DataFrame(data_2021)
    df_2022 = pd.DataFrame(data_2022)

    # 计算每个分支机构的总销售额
    sales_2021 = df_2021.groupby('branch_id')['total_sales'].sum().reset_index()
    sales_2022 = df_2022.groupby('branch_id')['total_sales'].sum().reset_index()

    # 重命名列以反映年份
    sales_2021.columns = ['branch_id', 'total_sales_2021']
    sales_2022.columns = ['branch_id', 'total_sales_2022']

    # 合并数据,如果有缺失值用0表示
    sales_pivot = pd.merge(sales_2021, sales_2022, on='branch_id', how='outer').fillna(0)
    return sales_pivot

# 计算结果
cal(df_2021,df_2022)
  • df.groupby(['branch_id'])['total_sales']:按照 branch_id 列进行分组,对total sales进行聚合操作。
  • .sum():对每组的 total_sales 列进行求和。
  • .reset_index(): 重置索引,将分组键转化为普通列。

Pandas语法介绍

GroupBy()

GroupBy() 是 pandas 中用于对数据进行分组和聚合的函数。和SQL 中的 GROUP BY 功能一样,常用于数据统计分析,但在python中的语法不一致,例如上面答案中df.groupby(['分组列'])['聚合列'].sum()

其基本语法如下:

df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, dropna=True)

常用参数

  • by: 指定用于分组的列名或函数。可以是单个列名、列表或字典。
  • axis: 分组轴,0 或 ‘index’ 表示按行分组,1 或 ‘columns’ 表示按列分组(默认是 0)。
  • level: 用于分组的级别(对于 MultiIndex)。
  • as_index: 如果为 True,分组的键会成为结果 DataFrame 的索引(默认是 True)。
  • sort: 如果为 True,按照分组键对结果排序(默认是 True)。
  • group_keys: 如果为 True,保留分组键(默认是 True)。
  • squeeze: 如果为 True,尝试压缩结果的维度(默认是 False)。
  • observed: 如果为 True,仅考虑分类数据中的观察到的值(适用于分类变量,默认是 False)。
  • dropna: 如果为 True,丢弃所有分组键中包含 NaN 的分组(默认是 True)。
Merge()

Merge() 是 pandas 中用于合并两个 DataFrame 的函数。Merge() 和SQL语言中的连接Join用法相似,参数中也有left、right join等连接方式,以及通过on选择链接键。其基本语法如下:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'))

常用参数

  • left: 左侧要合并的 DataFrame。
  • right: 右侧要合并的 DataFrame。
  • how: 合并方式,可以是 ‘left’、‘right’、‘outer’ 或 ‘inner’(默认是 ‘inner’)。
  • on: 用于连接的列名,当左右 DataFrame 的列名相同时使用。
  • left_on: 左侧 DataFrame 中用作连接键的列名。
  • right_on: 右侧 DataFrame 中用作连接键的列名。
  • left_index: 如果为 True,使用左侧 DataFrame 的索引进行连接。
  • right_index: 如果为 True,使用右侧 DataFrame 的索引进行连接。
  • suffixes: 用于结果 DataFrame 中重复列名的后缀,默认是 (‘_x’, ‘_y’)。

更多详细答案可关注公众号查阅。
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐