【Pandas思考记录】力扣1821. 寻找今年具有正收入的客户

博客介绍

本博客将探讨如何使用Pandas库在Python中处理和分析数据。我们将以一个具体的SQL查询转换为Pandas代码的例子为中心,展示数据处理的两种不同方法。此次案例中,我们的目标是从客户数据中找出2021年具有正收入的客户ID。

题目背景

在给定的客户数据中,包含了客户ID、年份和收入等信息。我们的任务是从中筛选出2021年收入为正的客户。

解决方案分析

方案一

def find_customers(customers: pd.DataFrame) -> pd.DataFrame:
    df = customers[(customers['revenue'] > 0) & (customers['year'] == 2021)]
    return df[['customer_id']]

解释

  1. 数据筛选
    • 使用布尔索引,customers['revenue'] > 0customers['year'] == 2021 分别筛选出收入为正和年份为2021的记录。
    • 两个条件同时满足,使用 & 运算符结合。
  2. 返回结果
    • df[['customer_id']] 确保返回的DataFrame仅包含客户ID这一列。
  3. 功能
    • 此方法直接在原始DataFrame上进行条件筛选,找出符合条件的客户ID。

方案二

def find_customers(customers: pd.DataFrame) -> pd.DataFrame:
    # 筛选出2021年的数据
    customers_2021 = customers[customers['year'] == 2021]

    # 按customer_id分组,并计算每个分组的revenue总和
    grouped_customers = customers_2021.groupby('customer_id')['revenue'].sum()

    # 筛选出revenue总和大于0的客户
    positive_revenue_customers = grouped_customers[grouped_customers > 0]

    # 返回包含满足条件的customer_id的DataFrame
    return pd.DataFrame({'customer_id': positive_revenue_customers.index})

解释

  1. 筛选年份
    • 首先筛选出2021年的数据。
  2. 分组聚合
    • 通过groupby按照customer_id分组,然后对每个分组的revenue求和。
  3. 筛选正收入客户
    • 对分组后的总收入进行筛选,保留总收入大于0的客户。
  4. 返回结果
    • 创建一个新的DataFrame,仅包含满足条件的客户ID。
  5. 功能
    • 此方法先对数据进行分组,然后计算每个客户在2021年的总收入,筛选出收入为正的客户。

总结

以上两种方法虽然都能达到相同的目的,但处理数据的逻辑略有不同。第一种方法适合用于直接筛选符合特定条件的记录。第二种方法在需要对数据进行更复杂的分组和聚合操作时更加合适。选择哪一种方法取决于具体的数据情况和需求。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值