zoukankan      html  css  js  c++  java
  • 2018.03.29 python-pandas transform/apply 的使用

    
    
     1 #一般化的groupby方法:apply
     2 df = pd.DataFrame({'data1':np.random.rand(5),
     3                    'data2':np.random.rand(5),
     4                    'key1':list('aabba'),
     5                    'key2':['one','two','one','two','one']})
     6 print(df)
     7 #print(df.groupby('key1').apply(lambda x:x.describe()))
     8 #apply直接运算其中的函数
     9 #这里是匿名函数,直接描述分组后的统计量
    10 
    11 def f_df1(d,n):
    12     return(d.sort_index()[:n]) #返回排序后的前n行数据
    13 def f_df2(d,k1):
    14     return(d[k1])#返回分组后表的k1列,结果为series,层次化索引
    15 print(df.groupby('key1').apply(f_df1,2),'
    ')#引入自己创建的函数,注意书写格式,f_df1的第一个参数默认df 第二个参数,2的形式
    16 print(df.groupby('key1').apply(f_df2,'data2'))
    17 #直接运行f_df函数
    18 #参数直接写在后面,也可以写为:.apply(f_df,n=2)
    结果:
          data1     data2 key1 key2
    0  0.253473  0.731034    a  one
    1  0.531445  0.061414    a  two
    2  0.733180  0.122293    b  one
    3  0.550177  0.115940    b  two
    4  0.101753  0.510581    a  one
               data1     data2 key1 key2
    key1                               
    a    0  0.253473  0.731034    a  one
         1  0.531445  0.061414    a  two
    b    2  0.733180  0.122293    b  one
         3  0.550177  0.115940    b  two

    key1  
    a     0    0.731034
          1    0.061414
          4    0.510581
    b     2    0.122293
          3    0.115940
    Name: data2, dtype: float64
     1 # 数据分组转换 .transform
     2 import numpy as np
     3 import pandas as pd
     4 df = pd.DataFrame({'data1':np.random.rand(5),
     5                    'data2':np.random.rand(5),
     6                    'key1':list('aabba'),
     7                    'key2':['one','two','one','two','one']})
     8 print(df)
     9 k_mean = df.groupby('key1').mean()
    10 print(k_mean)
    11 print(pd.merge(df,k_mean,left_on = 'key1',right_index = True).add_prefix('mean_'))#.add_profix('mean_'):增添前缀
    12 print('------')
    13 #通过分组,合并,得到一个包含均值的Dataframe   以key1位分组的列均值
    14 
    15 print(df.groupby('key2').mean())#按照key2分组求均值
    16 print(df.groupby('key2').transform(np.mean))
    17 #data1,data2每个位置的元素取对应分组列的均值
    18 #字符串不能进行计算

    结果:
          data1     data2 key1 key2
    0  0.845365  0.411704    a  one
    1  0.300226  0.411719    a  two
    2  0.476632  0.628493    b  one
    3  0.985675  0.304024    b  two
    4  0.418804  0.229940    a  one
             data1     data2
    key1                   
    a     0.521465  0.351121
    b     0.731153  0.466258
       mean_data1_x  mean_data2_x mean_key1 mean_key2  mean_data1_y  mean_data2_y
    0      0.845365      0.411704         a       one      0.521465      0.351121
    1      0.300226      0.411719         a       two      0.521465      0.351121
    4      0.418804      0.229940         a       one      0.521465      0.351121
    2      0.476632      0.628493         b       one      0.731153      0.466258
    3      0.985675      0.304024         b       two      0.731153      0.466258
    ------
             data1     data2
    key2                   
    one   0.580267  0.423379
    two   0.642951  0.357872
          data1     data2
    0  0.580267  0.423379
    1  0.642951  0.357872
    2  0.580267  0.423379
    3  0.642951  0.357872
    4  0.580267  0.423379

  • 相关阅读:
    BeagleBone Black安装小米随身WiFi驱动方法
    java-ee,ssh整合博文收藏
    BeagleBoneBlack Linux开发相关链接收藏
    Debian7.7 wheezy 中源码安装emacs24
    GLOG使用注意事项
    centos、linux改变ll命令显示颜色
    centos中samba配置后始终连不上的绝招
    中兴电信光纤猫F612管理员密码获取方法
    STM32W108芯片的SWD在IAR7.30版本中不能用
    TRF7960天线参数试验
  • 原文地址:https://www.cnblogs.com/jxzhu/p/8668532.html
Copyright © 2011-2022 走看看