Python学习笔记:pandas之transform

一、介绍

利用 transform 可以高效地汇总数据,直白的说:增加一列汇总列。

一般情况下,transformgroupby 组合使用。

使用语法:

Series.transform(func, axis=0, **kwargs)

二、实操

  • 基础用法
import pandas as pd
import numpy as np

df = pd.DataFrame({'A':range(3),
                   'B':range(1,4)})
df
'''
   A  B
0  0  1
1  1  2
2  2  3
'''

# 整体 +1
df.transform(lambda x: x+1)

s = pd.Series(range(3))
s.transform([np.sqrt, np.exp])
'''
       sqrt       exp
0  0.000000  1.000000
1  1.000000  2.718282
2  1.414214  7.389056
'''
  • 分组变换

inputsplitapply(sum)combine

df = pd.DataFrame({
    "Date": [
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05",
        "2015-05-08", "2015-05-07", "2015-05-06", "2015-05-05"],
    "Data": [5, 8, 6, 1, 50, 100, 60, 120],
})

df['sum'] = df.groupby('Date')['Data'].transform(sum)
df['size'] = df.groupby('Date')['Data'].transform(len)
df
'''
         Date  Data  sum  size
0  2015-05-08     5   55     2
1  2015-05-07     8  108     2
2  2015-05-06     6   66     2
3  2015-05-05     1  121     2
4  2015-05-08    50   55     2
5  2015-05-07   100  108     2
6  2015-05-06    60   66     2
7  2015-05-05   120  121     2
'''

不使用 transform 方法进行变换。

temp = df.groupby('Date')['Data'].sum().rename('Total').reset_index()

df_2 = pd.merge(df, temp, how='left')
df_2['percent'] = df_2['Data']/df_2['Total']
'''
         Date  Data  sum  size  Total   percent
0  2015-05-08     5   55     2     55  0.090909
1  2015-05-07     8  108     2    108  0.074074
2  2015-05-06     6   66     2     66  0.090909
3  2015-05-05     1  121     2    121  0.008264
4  2015-05-08    50   55     2     55  0.909091
5  2015-05-07   100  108     2    108  0.925926
6  2015-05-06    60   66     2     66  0.909091
7  2015-05-05   120  121     2    121  0.991736
'''

三、apply 和 transform 结合对比

在与 apply() 一起使用时,transform 需要进行去重操作,一般是通过指定一或多个列完成。

此外,匿名函数永远不是一个很好的办法,在进行简单计算时,无论是使用 transfromagg 还是 apply,都要尽可能使用自带方法!!!

apply 方法可以结合 joblib 多线程、多进程模块构造相应的函数执行计算,加快计算速度。

参考链接:pandas.Series.transform

参考链接:新手向——理解Pandas的Transform

参考链接:pandas:apply和transform方法的性能比较

posted @   Hider1214  阅读(912)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示