Pandas DataFrame列运算详解:map、apply、transform与agg的使用

Chloe
Chloe
发布时间:2026-10-14| 3人浏览过
原创

本文深入解析Pandas中DataFrame的单列、多列及分组运算方法。通过map实现元素级操作,利用apply处理行或列聚合,结合transform进行组内映射,以及使用agg执行复杂分组统计。涵盖具体代码示例与参数说明,帮助开发者高效处理数据。

Pandas DataFrame列运算详解:map、apply、transform与agg的使用

1.单列运算

在Pandas库中,DataFrame的任意一列本质上都是一个Series对象。针对单一列的数据处理,推荐使用map方法,它能够高效地对列中的每个元素执行指定操作。


df['col2'] = df['col1'].map(lambda x: x**2)

在此过程中,lambda表达式里的x参数代表当前遍历到的元素值。除了使用内联的lambda函数,开发者也可以定义独立的普通函数来替代,以增强代码的可读性和复用性,例如:


define square(x): 
  return (x ** 2) 
 
df['col2'] = df['col1'].map(square) 

2.多列运算

apply()函数的作用机制是将待处理的数据对象(如DataFrame的行或列)拆分为多个片段,随后对每个片段调用传入的函数,最后尝试将各片段的处理结果重新组合。

若需对DataFrame中的多列同时进行计算,例如实现公式 col3 = col1 + 2 * col2,应使用apply方法。具体操作如下:


df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1) 

这里的x参数代表当前处理的行数据,可以通过列名索引访问各列的值。

示例2


In [44]: f = lambda x : x.max()-x.min()

In [45]: df.apply(f)
Out[45]:
data1  5.042275
data2  1.967290
dtype: float64

In [46]: df.apply(f,axis=1)
Out[46]:
0  2.810074
1  1.009774
2  0.537183
3  0.813714
4  1.750022
dtype: float64

applymap()

利用DataFrame提供的applymap方法,可以将自定义函数直接应用于数据集中的每一个元素,实现元素级的转换操作。


In [47]: f = lambda x : x+1

In [48]: df.applymap(f)
Out[48]:
   data1   data2
0 -1.332263 1.477812
1 0.284755 1.294528
2 0.066644 0.603827
3 1.757402 2.571117
4 3.710012 1.959990

值得注意的是,Series对象同样具备元素级函数应用的方法map,二者在适用场景上有所区别。


In [49]: df['data1']
Out[49]:
0  -2.332263
1  -0.715245
2  -0.933356
3  0.757402
4  2.710012
Name: data1, dtype: float64

In [50]: df['data1'].map(f)
Out[50]:
0  -1.332263
1  0.284755
2  0.066644
3  1.757402
4  3.710012
Name: data1, dtype: float64

3.分组运算

将groupby与transform结合使用,可以便捷地实现类似SQL中的聚合运算逻辑,例如:


df['col3'] = df.groupby('col1')['col2'].transform(lambda x: (x.sum() - x) / x.count()) 

在transform函数内部,x.sum()与x.count()的功能与SQL语句中的聚合函数相似,分别用于计算当前分组内的总和与记录数量。此外,transform的结果还可以作为映射依据使用,例如:


sumcount = df.groupby('col1')['col2'].transform(lambda x: x.sum() + x.count()) 
df['col1'].map(sumcount) 

对col1进行map操作,从而获取对应的col2经过特定运算后的值。

4.聚合函数

结合groupby与agg方法,可以实现SQL中的分组聚合统计,这需要指定相应的聚合函数,例如:


df['col2'] = df.groupby('col1').agg({'col1':{'col1_mean': mean, 'col1_sum‘': sum}, 'col2': {'col2_count': count}}) 

上述代码执行后,会生成包含col1_mean、col1_sum以及col2_count的新列。

示例2


In [52]: df.agg(['mean','sum'])
Out[52]:
     data1   data2
mean -0.102690 0.581455
sum -0.513449 2.907274

函数 说明
count 分组中非Nan值的数量
sum 非Nan值的和
mean 非Nan值的平均值
median 非Nan值的算术中间数
std,var 标准差、方差
min,max 非Nan值的最小值和最大值
prob 非Nan值的积
first,last 第一个和最后一个非Nan值

至此,关于Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)的介绍已完成。如需了解更多关于Pandas中map、apply、transform及agg的相关内容,建议查阅本站过往文章或继续浏览后续推荐内容,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。