2018.03.29 python-pandas transform/apply 的使用
#一般化的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 的使用的更多相关文章
- 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 ...
- 2018.03.29 python-matplotlib 图表生成
'''Matplotlib -> 一个python版的matlab绘图接口,以2D为主,支持python,numpy,pandas基本数据结构,高效图标库''' import numpy as ...
- 2018.03.29 python-pandas 数据读取
#数据读取# read_table,read_csv,read_excel #读取普通分隔数据:read_table #可以读取txt,csv import os import pandas as p ...
- 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 ...
- 2018/03/29 每日一个Linux命令 之 ping
ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面&g ...
- Python pandas快速入门
Python pandas快速入门2017年03月14日 17:17:52 青盏 阅读数:14292 标签: python numpy 数据分析 更多 个人分类: machine learning 来 ...
- Python pandas & numpy 笔记
记性不好,多记录些常用的东西,真·持续更新中::先列出一些常用的网址: 参考了的 莫烦python pandas DOC numpy DOC matplotlib 常用 习惯上我们如此导入: impo ...
- 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】
--------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...
- python & pandas链接mysql数据库
Python&pandas与mysql连接 1.python 与mysql 连接及操作,直接上代码,简单直接高效: import MySQLdb try: conn = MySQLdb.con ...
随机推荐
- Python3零基础入门学习视频+源码+课件+习题-小甲鱼
目录 1. 介绍 2. 目录 3. 下载地址 1. 介绍 适用人群 完全零基础入门,不需要任何前置知识. 课程概述 本系列教程面向零基础的同学,是一个深入浅出,通俗易懂的Python3视频教程. 前半 ...
- 安装与学习laravel
安装 composer cd /var/www/html curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/ ...
- iotop发现jdb2/sdb1-8 io使用过高解决办法
一.现象 [root@push-- ~]# iotop otal DISK READ: 0.00 B/s | Total DISK WRITE: 6.26 M/s TID PRIO USER DISK ...
- 3.4 jmu-java-随机数-使用蒙特卡罗法计算圆周率的值 (10 分)
import java.util.Scanner; import java.util.Random; public class Main { public static void ma ...
- python 多线程、线程锁、事件
1. 多线程的基本使用 import threading import time def run(num): print('Num: %s'% num) time.sleep(3) if num == ...
- Java基本的程序结构设计 基本类型的输入输出
读取输入: java.util.Scanner 一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器. 了解: Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹 ...
- haproxy教程
一.haproxy简介 HAProxy is a free, very fast and reliable solution offering high availability, load bala ...
- ORACLE中的TOP-N查询(TOP-N分析)、分页查询
TOP-N查询(TOP-N分析):就是获取某一数据集合中的前N条记录,实际应用中经常用到. Oracle中不支持SELECT TOP语句(MySQL中也没用此语句),需要借助ROWNUM伪列来实现TO ...
- Quantitative Strategies for Achieving Alpha (三)
chapter 4: Profitability Profitability measures we tested include return on invested capital, return ...
- BZOJ 4011: [HNOI2015]落忆枫音 计数 + 拓扑排序
Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出 这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们 ...