
在数据分析和处理中,我们经常需要从大型数据集中提取满足特定条件的数据,并对这些数据进行聚合统计。例如,在一个包含各种维度信息的数据表中,我们可能需要找出某个特定数值列为缺失值(nan)的所有记录,然后按不同的维度(如地理区域和时间)进行分组,并计算每个分组中符合条件的记录数量。pandas库提供了强大而灵活的功能来高效地完成这类任务。
要实现上述需求,主要涉及Pandas的两个核心操作:条件筛选(Boolean indexing)和分组聚合(groupby())。
首先,我们需要一个示例数据集。假设我们有一个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)。
以下是使用Pandas实现上述数据处理逻辑的Python代码:
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的记录数量。
result_df = df[df['NumericValue'].isna()].groupby(
by=['SpatialDim', 'TimeDim']
).size().reset_index(name='count')本教程详细演示了如何利用Pandas库的强大功能,通过条件筛选和多维度分组聚合,从复杂数据集中提取有价值的信息。掌握isna()、布尔索引、groupby()以及各种聚合函数的使用,是进行高效数据清洗、探索和分析的关键技能。通过灵活运用这些方法,可以应对各种数据处理挑战,从原始数据中洞察模式和趋势。
以上就是Pandas数据处理:基于条件筛选并按多维度分组计数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号