Pandas DataFrame列运算详解:map、apply、transform与agg的使用
本文深入解析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的相关内容,建议查阅本站过往文章或继续浏览后续推荐内容,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









