讲师中心 微信公众号
AI工具推荐 视频效率加速

Pandas数据处理:基于条件筛选并按多维度分组计数

大宇酱_8214

大宇酱_8214

发布时间:2025-07-19 21:22:16

|

773人浏览过

|

来源于php中文网

原创

Pandas数据处理:基于条件筛选并按多维度分组计数

本教程详细介绍了如何使用Pandas库对数据进行高效处理。我们将学习如何根据特定条件(如NaN值)筛选DataFrame中的行,并在此基础上,按多个维度(如空间维度和时间维度)进行分组,最终统计满足条件的记录数量。通过实际代码示例,帮助读者掌握数据清洗、筛选和聚合的关键技巧,提升数据分析能力。

在数据分析和处理中,我们经常需要从大型数据集中提取满足特定条件的数据,并对这些数据进行聚合统计。例如,在一个包含各种维度信息的数据表中,我们可能需要找出某个特定数值列为缺失值(nan)的所有记录,然后按不同的维度(如地理区域和时间)进行分组,并计算每个分组中符合条件的记录数量。pandas库提供了强大而灵活的功能来高效地完成这类任务。

Pandas核心操作:筛选与分组计数

要实现上述需求,主要涉及Pandas的两个核心操作:条件筛选(Boolean indexing)和分组聚合(groupby())。

1. 数据准备

首先,我们需要一个示例数据集。假设我们有一个CSV文件,名为space.csv,其内容如下:

Id,SpatialDimType,SpatialDim,TimeDim,Value,NumericValue,Low,High
32256659,COUNTRY,AND,2022,No data,,,
32256659,COUNTRY,AND,2022,No data,,,
32256659,COUNTRY,AND,2023,No data,,,
32256661,COUNTRY,ATG,2022,No data,,,
32256664,COUNTRY,AUS,2001,No data,,,
32256664,COUNTRY,AUS,2001,No data,,,
32256664,COUNTRY,AUS,2001,No data,,,
32256664,COUNTRY,AUS,2004,No data,,,
32256664,COUNTRY,AUS,2004,No data,,,
32256665,COUNTRY,AUT,2004,No data,,,

请注意,NumericValue列中存在缺失值(在CSV中表现为空白,Pandas读取时会识别为NaN)。

2. 实现筛选与分组计数

以下是使用Pandas实现上述数据处理逻辑的Python代码:

Secure Python Code Sandbox
Secure Python Code Sandbox

安全 Python 代码沙箱:在隔离的沙箱中执行任意 Python 代码,预装 requests、NumPy、pandas 库。返回 stdout、stderr。

下载
import pandas as pd

# 1. 加载数据
# 假设 space.csv 文件与脚本在同一目录下
df = pd.read_csv('./space.csv')

# 2. 条件筛选:过滤出 'NumericValue' 列为 NaN 的行
# df['NumericValue'].isna() 会返回一个布尔序列,True表示NaN,False表示非NaN
filtered_df = df[df['NumericValue'].isna()]

# 3. 多维度分组与计数:
# 对筛选后的数据按 'SpatialDim' 和 'TimeDim' 两列进行分组
# .size() 计算每个分组中的行数(即计数)
# .reset_index(name='count') 将分组键(SpatialDim, TimeDim)和计数结果转换为DataFrame的列
result_df = filtered_df.groupby(
    by=['SpatialDim', 'TimeDim']
).size().reset_index(name='count')

# 4. 打印结果
print(result_df)

运行上述代码,将得到如下输出:

  SpatialDim  TimeDim  count
0        AND     2022      2
1        AND     2023      1
2        ATG     2022      1
3        AUS     2001      3
4        AUS     2004      2
5        AUT     2004      1

这个结果清晰地展示了每个SpatialDim和TimeDim组合下,NumericValue为NaN的记录数量。

代码详解与原理

  • pd.read_csv('./space.csv'): 这是读取CSV文件到Pandas DataFrame的标准方法。Pandas会自动识别并处理常见的缺失值表示(如空字符串、NA等)为NaN。
  • df['NumericValue'].isna(): isna()是Pandas Series(列)和DataFrame对象的一个方法,用于检测数据中的缺失值(NaN)。它返回一个布尔型Series,其中缺失值对应的位置为True,非缺失值为False。
  • df[df['NumericValue'].isna()]: 这是一种称为布尔索引(Boolean Indexing)的筛选方式。我们将布尔Series作为索引传递给DataFrame,Pandas会返回所有对应布尔值为True的行。
  • .groupby(by=['SpatialDim', 'TimeDim']): 这是Pandas中进行分组操作的核心。by参数接受一个列名或列名列表,表示要依据哪些列进行分组。在这里,我们根据SpatialDim和TimeDim的唯一组合来创建分组。
  • .size(): 在groupby对象上调用.size()方法会计算每个分组中元素的数量。它返回一个Series,其索引是分组键的组合。
  • .reset_index(name='count'): size()方法返回的Series,其索引是多层索引(MultiIndex),由SpatialDim和TimeDim组成。.reset_index()方法可以将这些索引层转换为普通的列。name='count'参数用于指定新生成的计数列的名称。

拓展与注意事项

  1. 其他筛选条件: 除了isna(),你还可以使用其他条件进行筛选,例如:
    • df[df['NumericValue'] > 10]:筛选NumericValue大于10的行。
    • df[df['SpatialDim'] == 'AND']:筛选SpatialDim为'AND'的行。
    • df[(df['TimeDim'] >= 2000) & (df['TimeDim']
  2. 其他聚合函数: 除了.size()(计数),groupby对象还支持多种聚合函数,例如:
    • .count():计算每个分组中非NaN值的数量。
    • .sum():计算每个分组中数值列的总和。
    • .mean():计算每个分组中数值列的平均值。
    • .min() / .max():计算最小值/最大值。
    • .agg():允许同时应用多个聚合函数。
  3. 链式操作: 在实际代码中,为了提高可读性和简洁性,可以将筛选和分组操作进行链式调用,如:
    result_df = df[df['NumericValue'].isna()].groupby(
        by=['SpatialDim', 'TimeDim']
    ).size().reset_index(name='count')
  4. 性能考量: 对于非常大的数据集,groupby操作的性能至关重要。Pandas的底层实现经过优化,通常效率很高。但在处理亿级数据时,可能需要考虑更高级的优化策略,如使用Dask或PySpark等分布式计算框架。

总结

本教程详细演示了如何利用Pandas库的强大功能,通过条件筛选和多维度分组聚合,从复杂数据集中提取有价值的信息。掌握isna()、布尔索引、groupby()以及各种聚合函数的使用,是进行高效数据清洗、探索和分析的关键技能。通过灵活运用这些方法,可以应对各种数据处理挑战,从原始数据中洞察模式和趋势。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2093

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3314

2023.10.07

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

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

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

691

2026.04.13

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2150

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

163

2025.11.30

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

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

3408

2023.11.20

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn