0

0

使用 Pandas DataFrame 计算多列组合的统计数据

花韻仙語

花韻仙語

发布时间:2025-10-08 14:08:15

|

683人浏览过

|

来源于php中文网

原创

使用 pandas dataframe 计算多列组合的统计数据

本文将介绍如何使用 Pandas 库对 DataFrame 中多个列的组合进行分组,并计算每个组合的统计数据,包括中位数、平均值、计数、90% 分位数和 10% 分位数。通过 groupby() 和 agg() 函数的结合使用,可以高效地实现这一目标,并展示了如何遍历所有可能的组合以生成独立的统计 DataFrame。

问题描述

假设我们有一个 DataFrame,包含多个变量(例如 Var1、Var2、Var3)和一个数值列 Value。我们的目标是针对 Var1、Var2 和 Var3 的所有可能组合,计算 Value 列的统计信息,并将结果以 DataFrame 的形式呈现。

解决方案

以下代码演示了如何使用 Pandas 实现这一目标:

云点滴客户关系管理CRM OA系统
云点滴客户关系管理CRM OA系统

云点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户随时随地简单、安全、可靠的备份客户信息。功能强大的报表统计使得用户大数据分析变的简单,

下载
import pandas as pd

# 示例 DataFrame (您可以替换为您自己的数据)
data = {'Var1': [True, False, True, False, True, False, True, False, True],
        'Var2': [1, 2, 3, 1, 2, 3, 1, 2, 3],
        'Var3': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
        'Value': [12, 93, 28, 23, 94, 12, 85, 23, 2]}
df = pd.DataFrame(data)

# 使用 groupby() 和 agg() 函数计算统计数据
df = df.groupby(["Var1", "Var2", "Var3"]).agg(
    Med=("Value", "median"),
    Mean=("Value", "mean"),
    Count=("Value", "count"),
    q90=("Value", lambda x: x.quantile(q=0.9)),
    q10=("Value", lambda x: x.quantile(q=0.1)),
)

# 确保所有可能的组合都存在
df = df.reindex(
    pd.MultiIndex.from_product(
        [[True, False], [1, 2, 3], ["A", "B", "C"]], names=["Var1", "Var2", "Var3"]
    )
)

# 打印每个组合的 DataFrame
for _, g in df.groupby(level=[0, 1, 2]):
    print(g)
    print("-" * 80)

代码解释:

  1. 导入 Pandas: 导入 Pandas 库,用于数据处理。
  2. 创建示例 DataFrame: 创建一个包含示例数据的 DataFrame。你需要将这个 DataFrame 替换为你自己的数据。
  3. groupby() 和 agg(): 使用 groupby() 函数按照 Var1、Var2 和 Var3 列进行分组。然后,使用 agg() 函数对每个组应用聚合函数
    • Med=("Value", "median"): 计算 Value 列的中位数,并将结果命名为 Med。
    • Mean=("Value", "mean"): 计算 Value 列的平均值,并将结果命名为 Mean。
    • Count=("Value", "count"): 计算每个组中 Value 列的计数,并将结果命名为 Count。
    • q90=("Value", lambda x: x.quantile(q=0.9)): 计算 Value 列的 90% 分位数,并将结果命名为 q90。 这里使用了 lambda 函数来调用 quantile() 方法。
    • q10=("Value", lambda x: x.quantile(q=0.1)): 计算 Value 列的 10% 分位数,并将结果命名为 q10。 同样使用了 lambda 函数。
  4. reindex(): 这一步非常重要,它确保了即使某些组合在原始数据中不存在,结果 DataFrame 中也会包含这些组合,并且对应的值为 NaN。 pd.MultiIndex.from_product() 创建一个包含所有可能的组合的多级索引。
  5. 遍历和打印: 使用 groupby(level=[0, 1, 2]) 再次对 DataFrame 进行分组,这次是为了按照多级索引的级别(Var1、Var2、Var3)进行分组。然后,遍历每个组,并打印出对应的 DataFrame。

注意事项

  • 确保你的 Pandas 版本是最新的,以获得最佳性能和功能。
  • 如果你的 DataFrame 非常大,可以考虑使用 dask 库进行并行计算,以提高效率。
  • 可以根据需要修改 agg() 函数中的聚合函数,以计算其他统计信息。
  • 如果某些组合在原始数据中不存在,则计算出的统计数据将为 NaN。reindex() 方法可以确保所有组合都被包含,即使它们在原始数据中不存在。

总结

通过结合使用 Pandas 的 groupby() 和 agg() 函数,可以轻松地计算 DataFrame 中多个列组合的统计数据。 reindex() 函数可以确保所有可能的组合都包含在结果中,即使某些组合在原始数据中不存在。 这种方法非常灵活,可以根据需要进行定制,以满足不同的数据分析需求。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.20

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

190

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

41

2026.01.05

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

462

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

275

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

724

2023.10.16

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

NumPy 教程
NumPy 教程

共44课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号