
本文将详细介绍如何使用Pandas高效地根据一个字典来聚合DataFrame的列。该字典定义了新的列名及其对应的原始DataFrame列列表。我们将探讨两种Pythonic且高效的方法:一种利用`groupby(axis=1)`进行列分组求和,另一种则通过转置DataFrame来适应新版Pandas中`groupby`行为的变化,确保解决方案的兼容性和性能。
在数据分析和处理中,我们经常需要根据特定的规则对DataFrame的列进行组合或聚合。一个常见的场景是,我们有一个DataFrame和一份映射字典,字典的键是新的列名,值是需要聚合的原始DataFrame列名的列表。例如,如果字典中'x': ['A', 'D'],则新的DataFrame中的'x'列应该是原始DataFrame中'A'和'D'列的行级和。本教程将展示如何以Pandas的惯用方式(Pythonic)实现这一目标,避免使用低效的循环。
首先,我们创建用于演示的DataFrame和映射字典:
import pandas as pd
df = pd.DataFrame([[4, 8, 52, 7, 54],
[0, 20, 2, 21, 35],
[2, 33, 12, 1, 87]],
columns=['A', 'B', 'C', 'D', 'E'])
dic = {'x': ['A', 'D'], 'y': ['E'], 'z': ['B', 'C']}
print("原始DataFrame:")
print(df)
print("\n映射字典:")
print(dic)原始DataFrame df 如下:
A B C D E 0 4 8 52 7 54 1 0 20 2 21 35 2 2 33 12 1 87
我们的目标是生成一个新DataFrame,其中包含 x, y, z 三列,分别对应 (A+D), (E), (B+C) 的行级和。
这种方法的核心思想是:首先创建一个“逆向”字典,将原始列名映射到它们应该归属的新列名。然后,利用 df.rename() 临时性地将DataFrame的列名修改为这些新的聚合组名。最后,通过 groupby(level=0, axis=1).sum() 对具有相同新列名的列进行分组求和。
创建逆向字典 d2: 这个字典将原始列名作为键,新的聚合列名作为值。 例如,'A' 应该映射到 'x','D' 也应该映射到 'x'。
d2 = {v: k for k, l in dic.items() for v in l}
print("\n逆向字典 d2:")
print(d2)输出 d2:
{'A': 'x', 'D': 'x', 'E': 'y', 'B': 'z', 'C': 'z'}重命名列并分组求和: 使用 df.rename(columns=d2) 将 df 的列名根据 d2 进行重命名。 例如,列 A 和 D 都会被重命名为 x。 然后,groupby(level=0, axis=1).sum() 会沿着列方向(axis=1)对具有相同名称的列进行分组,并计算它们的和。level=0 在这里是默认值,表示按列名本身进行分组。
out_method1 = df.rename(columns=d2).groupby(level=0, axis=1).sum()
print("\n方法一结果:")
print(out_method1)输出结果:
x y z 0 11 54 60 1 21 35 22 2 3 87 45
这里的 x 列是 A+D 的和 (4+7=11, 0+21=21, 2+1=3),y 列是 E 的值,z 列是 B+C 的和 (8+52=60, 20+2=22, 33+12=45)。
在某些较新版本的Pandas中,直接在 groupby 中使用 axis=1 可能会被弃用。为了保持兼容性并提供另一种高效的解决方案,我们可以利用DataFrame的转置操作。
创建逆向字典 d2: 这一步与方法一相同,因为我们需要相同的映射关系。
d2 = {v: k for k, l in dic.items() for v in l}转置、重命名、分组求和并再次转置:
out_method2 = df.T.rename(d2).groupby(level=0).sum().T
print("\n方法二结果:")
print(out_method2)输出结果与方法一相同:
x y z 0 11 54 60 1 21 35 22 2 3 87 45
通过上述方法,我们可以优雅且高效地根据自定义的字典映射关系来聚合DataFrame的列,这在数据清洗、特征工程等场景中非常实用。掌握这些Pandas技巧将显著提升数据处理的效率和代码的可读性。
以上就是利用Pandas按字典映射聚合DataFrame列的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号