首页 元宇宙

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化

分类:元宇宙
字数: (5920)
阅读: (8507)
内容摘要:Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化,

在数据分析领域,Pandas 分组与聚合分析(groupby) 是一项至关重要的技术。它允许我们将数据集按照一个或多个列进行分组,然后对每个分组应用聚合函数,从而提取有意义的信息。举个例子,我们可能需要分析不同地区的销售额,或者不同客户群体的购买行为。如果没有 Groupby,这类分析将会变得异常繁琐。

问题场景:电商用户行为分析

假设我们有一个电商平台的订单数据,包含了用户ID、商品ID、订单金额、下单时间等信息。现在,我们需要分析每个用户的平均订单金额,找出高价值用户群体。

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化

Groupby 底层原理:Split-Apply-Combine

Pandas Groupby 的核心思想是 Split-Apply-Combine(拆分-应用-合并)。

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化
  1. Split(拆分):根据指定的列将数据分成多个组。Pandas 内部会创建一个分组器对象,记录每个分组的索引信息。
  2. Apply(应用):对每个分组应用聚合函数。聚合函数可以是 Pandas 内置的(如 sum、mean、count),也可以是自定义的函数。
  3. Combine(合并):将每个分组的结果合并成一个新的 DataFrame。

代码实现:用户平均订单金额计算

import pandas as pd

# 创建示例数据
data = {
    'user_id': [1, 1, 2, 2, 3, 3, 3],
    'order_amount': [100, 200, 150, 250, 80, 120, 200]
}
df = pd.DataFrame(data)

# 使用 Groupby 计算每个用户的平均订单金额
user_avg_amount = df.groupby('user_id')['order_amount'].mean()

print(user_avg_amount)

这段代码首先创建了一个包含用户ID和订单金额的 DataFrame。然后,我们使用 groupby('user_id') 将数据按照用户ID进行分组。接着,我们选择 order_amount 列,并应用 mean() 函数计算每个分组的平均值。最后,打印结果。

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化

进阶用法:多列分组与自定义聚合函数

除了简单的单列分组,Groupby 还支持多列分组。例如,我们可以同时按照用户ID和下单月份进行分组,分析不同用户在不同月份的消费习惯。

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化
import pandas as pd

# 创建示例数据
data = {
    'user_id': [1, 1, 2, 2, 3, 3, 3],
    'order_amount': [100, 200, 150, 250, 80, 120, 200],
    'order_month': ['2023-01', '2023-01', '2023-02', '2023-02', '2023-03', '2023-03', '2023-03']
}
df = pd.DataFrame(data)

# 使用 Groupby 计算每个用户在每个月的平均订单金额
user_month_avg_amount = df.groupby(['user_id', 'order_month'])['order_amount'].mean()

print(user_month_avg_amount)

此外,我们还可以使用自定义的聚合函数。例如,我们可以定义一个函数来计算每个分组的订单金额的中位数。

import pandas as pd
import numpy as np

# 创建示例数据
data = {
    'user_id': [1, 1, 2, 2, 3, 3, 3],
    'order_amount': [100, 200, 150, 250, 80, 120, 200]
}
df = pd.DataFrame(data)

# 定义自定义聚合函数,计算中位数
def median(series):
    return np.median(series)

# 使用 Groupby 和自定义聚合函数计算每个用户的订单金额中位数
user_median_amount = df.groupby('user_id')['order_amount'].agg(median)

print(user_median_amount)

实战避坑:处理缺失值与性能优化

在使用 Groupby 进行数据分析时,需要注意以下几点:

  1. 处理缺失值:如果数据中存在缺失值(NaN),可能会影响聚合结果。可以使用 fillna() 函数填充缺失值,或者使用 dropna() 函数删除包含缺失值的行。
  2. 性能优化:对于大型数据集,Groupby 操作可能会比较耗时。可以使用 numba 库对自定义聚合函数进行 JIT 编译,提高执行效率。此外,还可以考虑使用 Dask 等分布式计算框架,将计算任务分摊到多个节点上。

Groupby 与 Nginx 访问日志分析

除了电商数据,Groupby 也常用于分析 Nginx 访问日志。例如,我们可以统计每个 IP 地址的访问次数,找出恶意攻击的 IP 地址。这在服务器安全运维中十分重要。Nginx 本身可以通过配置 limit_reqlimit_conn 来做频率限制,防止恶意请求占用过多并发连接数,造成服务雪崩。配合宝塔面板等工具,可以更方便地管理 Nginx 配置。

import pandas as pd

# 假设 log_data 是从 nginx 日志文件中读取的数据
log_data = {
    'ip_address': ['192.168.1.1', '192.168.1.1', '192.168.1.2', '192.168.1.1', '192.168.1.3', '192.168.1.2'],
    'request_url': ['/index.html', '/product/123', '/index.html', '/about.html', '/contact.html', '/product/456']
}
df = pd.DataFrame(log_data)

# 统计每个 IP 地址的访问次数
ip_counts = df.groupby('ip_address')['request_url'].count()

print(ip_counts)

通过分析 Nginx 日志,我们可以进一步了解网站的访问情况,优化服务器配置,提升用户体验。 在高并发场景下,合理配置 Nginx 的反向代理和负载均衡策略至关重要。

Pandas Groupby 高阶玩法:分组聚合分析实战与性能优化

转载请注明出处: CoderPunk

本文的链接地址: http://m.acea4.store/blog/036990.SHTML

本文最后 发布于2026-04-15 22:41:11,已经过了12天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 夏天的风 2 天前
    写得太棒了,groupby 经常用,但是底层的 split-apply-combine 思想还是第一次看到这么清晰的解释。
  • 咸鱼翻身 4 天前
    代码示例很实用,直接copy就能跑,点赞!Nginx日志分析那块儿启发了我,准备用groupby来分析下慢查询日志。
  • 海带缠潜艇 4 天前
    代码示例很实用,直接copy就能跑,点赞!Nginx日志分析那块儿启发了我,准备用groupby来分析下慢查询日志。