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方法的性能比较

上一篇:PADS导入ECO时出现提示:数据库严重错误编号2015/2017


下一篇:同济大学博士/硕士学位论文LaTex模板的软件安装与环境配置