zoukankan      html  css  js  c++  java
  • 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方法的性能比较

  • 相关阅读:
    Linux6
    大小超过2t的分区规划 parted命令
    fdisk命令磁盘分区
    扩展
    磁盘管理
    在Linux中如何手动创建一个用户
    Linux5
    Linux4
    19_权限和分组
    18_django的用户模型和扩展django的用户模型
  • 原文地址:https://www.cnblogs.com/hider/p/15586104.html
Copyright © 2011-2022 走看看