#一般化的groupby方法:apply
df = pd.DataFrame({'data1':np.random.rand(5),
'data2':np.random.rand(5),
'key1':list('aabba'),
'key2':['one','two','one','two','one']})
print(df)
#print(df.groupby('key1').apply(lambda x:x.describe()))
#apply直接运算其中的函数
#这里是匿名函数,直接描述分组后的统计量 def f_df1(d,n):
return(d.sort_index()[:n]) #返回排序后的前n行数据
def f_df2(d,k1):
return(d[k1])#返回分组后表的k1列,结果为series,层次化索引
print(df.groupby('key1').apply(f_df1,2),'\n')#引入自己创建的函数,注意书写格式,f_df1的第一个参数默认df 第二个参数,2的形式
print(df.groupby('key1').apply(f_df2,'data2'))
#直接运行f_df函数
#参数直接写在后面,也可以写为:.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
 # 数据分组转换 .transform
import numpy as np
import pandas as pd
df = pd.DataFrame({'data1':np.random.rand(5),
'data2':np.random.rand(5),
'key1':list('aabba'),
'key2':['one','two','one','two','one']})
print(df)
k_mean = df.groupby('key1').mean()
print(k_mean)
print(pd.merge(df,k_mean,left_on = 'key1',right_index = True).add_prefix('mean_'))#.add_profix('mean_'):增添前缀
print('------')
#通过分组,合并,得到一个包含均值的Dataframe 以key1位分组的列均值 print(df.groupby('key2').mean())#按照key2分组求均值
print(df.groupby('key2').transform(np.mean))
#data1,data2每个位置的元素取对应分组列的均值
#字符串不能进行计算

结果:
      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

2018.03.29 python-pandas transform/apply 的使用的更多相关文章

  1. 2018.03.27 python pandas merge join 使用

    #2.16 合并 merge-join import numpy as np import pandas as pd df1 = pd.DataFrame({'key1':['k0','k1','k2 ...

  2. 2018.03.29 python-matplotlib 图表生成

    '''Matplotlib -> 一个python版的matlab绘图接口,以2D为主,支持python,numpy,pandas基本数据结构,高效图标库''' import numpy as ...

  3. 2018.03.29 python-pandas 数据读取

    #数据读取# read_table,read_csv,read_excel #读取普通分隔数据:read_table #可以读取txt,csv import os import pandas as p ...

  4. 2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab

    #透视表 pivot table #pd.pivot_table(data,values=None,index=None,columns=None, import numpy as np import ...

  5. 2018/03/29 每日一个Linux命令 之 ping

    ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面&g ...

  6. Python pandas快速入门

    Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...

  7. Python pandas & numpy 笔记

    记性不好,多记录些常用的东西,真·持续更新中::先列出一些常用的网址: 参考了的 莫烦python pandas DOC numpy DOC matplotlib 常用 习惯上我们如此导入: impo ...

  8. 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】

    --------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...

  9. python & pandas链接mysql数据库

    Python&pandas与mysql连接 1.python 与mysql 连接及操作,直接上代码,简单直接高效: import MySQLdb try: conn = MySQLdb.con ...

随机推荐

  1. php函数nl2br的反函数br2nl 将html中的br换行符转换为文本输入中的换行符

    下面这几个方法将能够帮你解决这个问题. PHP版将html中的<br />换行符转换为文本框中的换行符: 代码如下: function br2nl($text){ return preg_ ...

  2. php晚了8小时 PHP5中的时间相差8小时的解决办法

    php页面顶部加一句date_default_timezone_set("Asia/Shanghai");或者直接在php.ini设置date.timezone=Asia/Shan ...

  3. GitHub上一些有趣的开源项目[持续更新]

    TheAlgorithms/C-Plus-Plus 用C++实现了常见的算法,如排序算法,查找算法,以及一些常见的数据数据结构,如链表,二叉树. 链接:https://github.com/TheAl ...

  4. 十一、S3C2440 裸机 — GPIO

    11.1 GPIO 介绍 11.1.1 GPIO 管脚 GPIO 即是输入输出端口,S3C2440A 包含了 130 个多功能输入/输出口引脚并且它们为如下显示的八个端口: 端口 A(GPA):25 ...

  5. typedef int(init_fnc_t) (void)的理解

    typedef int(init_fnc_t) (void); 这个就是一个取别名的过程. 我们通常情况下会如下使用 typedef :typedef int MyInt;MyInt a; 这个时候我 ...

  6. 【POJ2486】Apple Tree

    题目大意:给定一棵 N 个节点的有根树,点有点权,边权均为1.现允许从根节点出发走 K 步,求可以经过的点权之和最大是多少. 题解:可以将点权看作是价值,将可以走的步数看作是重量,则转化成了一个树上背 ...

  7. chrome获取页面element的xPath

    chrome真的是强大的工具 1.在chrome打开的页面点击F12,进入开发者模式 2.点击弹出的开发者工具左上角的跟踪箭头,再点击需要跟踪的页面元素,html程序定位到元素在程序中位置 3.选中的 ...

  8. java数据结构--array与ArrayList的区别

    ArrayList 内部是由一个array 实现的. 如果你知道array 和 ArrayList 的相似点和不同点,就可以选择什么时候用array 或者使用ArrayList , array 提供 ...

  9. springboot 在idea中实现热部署

    SpringBoot的web项目,在每一次修改了java文件或者是resource的时候,都必须去重启一下项目,这样的话浪费了很多的时间,实现了热部署,在每一次作了修改之后,都会自动的重启 第一步:引 ...

  10. 全方面了解和学习PHP框架 PHP培训教程

    PHP成为最流行的脚本语言有许多原因:灵活性,易用性等等.对于项目开发来说,我们通常需要一个PHP框架来代替程序员完成那些重复的部分.本文,兄弟连将对PHP框架进行全面解析. PHP框架是什么? PH ...