承接R&Python Data Science 系列:数据处理(1)继续介绍剩余的函数。

1 衍生字段函数

主要有两个函数,mutate()和transmute(),两个函数在Python和R上使用方法相同,这两个函数本身有点区别:mutate()函数保留原来所有列,然后新增一列;transmute()只保留新增的一列:

python实现

from dfply import *import numpy as npimport pandas as pd##新增列x+y、x*y*z,mutate()函数diamonds >> mutate(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5)##新增列x+y、x*y*z,transmute()函数diamonds >> transmute(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(5)

R语言实现

library(dplyr)library(ggplot2)library(tidyr)##新增列x+y、x*y*z,mutate()函数diamonds %>% mutate(x_plus_y = x + y, xyz = x*y*z) %>% head(5)##新增列x+y、x*y*z,transmute()函数diamonds %>% transmute(x_plus_y = x + y, xyz = x*y*z) %>% head(5)

2 条件函数

这里介绍3个条件函数,if_else()、case_when()、between()函数,Python包dfply和R包dplyr中都是这3个函数,在用法上有点细微差别,日常中使用最多,在构建评分卡woe赋值的时候特别好用。

2.1 if_else函数

非A即B函数:

Python实现

##如果钻石价格大于2000,则钻石等级为A,其他为A-diamonds >> mutate(price_class = if_else(X.price > 2000, 'A', 'A-')) >> distinct(X.price_class)

而且if_else()函数可以嵌套使用,不过当条件判断超过2个的时候,建议使用case_when()函数。

##如果钻石价格大于2000,则钻石等级为A,1500-2000为A-, 1500以下为A--(diamonds >> mutate(price_class = if_else(X.price > 2000, 'A', if_else(X.price > 1500,'A-', 'A--'))) >> distinct(X.price_class) >>select(X.price_class))

R语言实现

##如果钻石价格大于2000,则钻石等级为A,其他为A-diamonds %>%   mutate(price_class = if_else(price > 2000, 'A', 'A-')) %>%  distinct(price_class)##如果钻石价格大于2000,则钻石等级为A,1500-2000为A-, 1500以下为A--diamonds %>%     mutate(price_class = if_else(price > 2000, 'A', if_else(price > 1500,'A-', 'A--'))) %>%     distinct(price_class)

注意:python在jupyter中使用管道函数换行书写代码的时候需要用()把代码括起来。

2.2 case_when函数

用于多条件赋值,评分卡Woe赋值的时候使用起来很方便。

python实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D(diamonds >> mutate(price_class = case_when([X.price > 2000, 'A'],                              [X.price > 1500 , 'B'],                              [X.price > 1000, 'C'],                              [True, 'D'])) >>distinct(X.price_class) >>select(X.price_class))

R语言实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为Ddiamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A',                                            price > 1500 ~ 'B',                                            price > 1000 ~ 'C',                                            TRUE ~ 'D')) %>%   distinct(price_class)

注意:case_when函数在Python和R语言中使用的时候有点区别,请留意。

2.3 between函数

区间判断条件函数,为闭区间[a,b]

python实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D(diamonds >> mutate(price_class = case_when([X.price > 2000, 'A'],                              [between(X.price,1500,2000) , 'B'],                              [between(X.price,1000,1500), 'C'],                              [True, 'D'])) >>  select(X.price_class) >> distinct(X.price_class))

R语言实现

##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为Ddiamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A',                                            between(price,1500,2000) ~ 'B',                                            between(price,1000,1500) ~ 'C',                                            TRUE ~ 'D')) %>%   distinct(price_class)

3 bind函数

两个函数:bind_rows()行拼接;bind_cols()列拼接:

Python实现

###bind_rows()函数diamonds2 = diamonds >> head(2)diamonds3 = diamonds >> tail(3)diamonds2 >> bind_rows(diamonds3)

##bind_cols()函数diamonds4 = diamonds >> select(1, X.carat, 'cut', -1)diamonds5 = diamonds >> select('x', 'y')diamonds4 >> bind_cols(diamonds5) >> head(5)

R语言实现

##bind_rows()函数diamonds2 = diamonds %>% head(2)diamonds3 = diamonds %>% tail(3)diamonds2 %>% bind_rows(diamonds3)##bind_cols()函数diamonds4 = diamonds %>% select(1, carat, cut, dim(diamonds)[2])diamonds5 = diamonds %>% select(x, y)diamonds4 %>% bind_cols(diamonds5) %>% head(5)

4 连接函数

这里主要介绍inner_join()、left_join()和rigth_join()三个函数

Python实现

a = pd.DataFrame({        'x1':['A','B','C'],        'x2':[1,2,3]    })b = pd.DataFrame({    'x1':['A','B','D'],    'x3':[True,False,True]})
##inner_join函数a >> inner_join(b, by='x1')

##left_join函数a >> left_join(b, by='x1')

##right_join函数a >> right_join(b, by='x1')

R语言实现

a = data.frame(x1 = c('A', 'B', 'C'), B = c(1, 2, 3))b = data.frame(x1 = c('A', 'B', 'D'), D = c(TRUE, FALSE, TRUE))##inner_join函数a %>% inner_join(b, by = 'x1')  ##或者inner_join(a, b, by = 'x1')##left_join函数a %>% left_join(b, by = 'x1')  ##或者left_join(a, b, by = 'x1')##right_join函数a %>% right_join(b, by = 'x1')  ##或者rigth_join(a, b, by = 'x1')

注意:R语言中可以使用XXX_join(a,b,by),Python中不可以使用。

inner join 重复数据_Ramp;Python Data Science 系列:数据处理(2)相关推荐

  1. python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...

    前言 使用正则表达式进行匹配,可以直接调用模块级函数,如match().search().findall()等,函数第一个参数是匹配的正则表达式,第二个参数则为要匹配的字符串.也可以使用re.comp ...

  2. Python Data Science的多版本多环境管理工具Anaconda

    简介 python开发中存在2个版本: python2和python3,这2个版本有细微的不同,在OS上安装2个版本并很好地管理各自的依赖包,并不是一个很好的事情. 再者,在团队开发中,每个开发者的环 ...

  3. sql server left join 重复数据原因图

    sql server left join 重复数据原因图     网购从这里开始 ( 物美价廉还等什么?!!! )

  4. 用爬虫收集网站公开数据丨Python爬虫实战系列(5)

    提示:最新Python爬虫资料/代码练习>>戳我直达 文章目录 前言 用爬虫收集公开数据 编写程序流程分析 确定Xpath表达式 1) 确定基准表达式 2) 确定抓取信息的表达式 3) 提 ...

  5. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  6. Python数据可视化 | Python实现Matplotlib系列colorbar的设置

    Python数据可视化 | Python实现Matplotlib系列colorbar的设置 目录 Python数据可视化 | Python实现Matplotlib系列colorbar的设置 color ...

  7. left join 重复数据_Python数据分析整理小节

    一.数据读取 1.读写数据库数据 读取函数: pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_fl ...

  8. python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...

    1. 数据文件 2. 读数据 import pandas as pd data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv') print(data ...

  9. kaggle笔记 2019数据科学碗Data Science Bowl 高分总结

    文章目录 7th总结 这次比赛的重点,在于过拟合问题和模型的泛化能力. 我就是疏忽了这一点,然后在Public leaderboard上是13名,然后最后成绩上,调到800多名. 7th总结 fina ...

最新文章

  1. SQLServer制作一个包含三个表的视图
  2. Java中如何读写cookie (二)
  3. java map用二叉树_【课堂笔记分享】linkedlist、二叉树、hashmap
  4. java ipmitool_ipmitool使用手册
  5. java treeset 重复_TreeSet判断重复元素解析及代码示例
  6. python之路day5_学习python之路--Day5 计算器
  7. linux 查看hive版本号,如何从命令提示符知道Hive和Hadoop版本?
  8. 【BIRT】02_开发一张简单的报表
  9. 编译php的问题,php编译常见错误
  10. sql server 配置管理器里为什么是32位_FT VIEW | SE高级应用之数据存入SQL数据库
  11. 六、Linux企业级YUM软件管理
  12. Android Eclipse 导入 AS Gradle AAR 库手册
  13. python--如何进行去重
  14. linux下oracle 9204 soft only,在CentOS4.3(x86_64)上安装Oracle9204 for linux(x86_64)
  15. STM32F407音乐播放器设计WM8978使用
  16. java2048ai,2048小游戏ai设计
  17. 用友显示用友通服务器,用友T3用友通无法连接服务器--用友T3用友通无法连接服务器...
  18. python爬山算法
  19. 企业级360°全方位用户画像:项目介绍[二]
  20. 利用百度poi计算城市能级及评价街道范围便利度、生活宜居情况等

热门文章

  1. 学习Node.js并开始在浏览器之外执行JavaScript
  2. 打破双亲委派么,怎么打破_打破它。 然后告诉我们您是如何打破它的。
  3. git 别名_Git别名简介:使用Git的更快方法
  4. linux升级openssh8.2,openssh7更换升级位8.2版本过程
  5. sqlite3修改表内容python_python之sqlite3使用详解(转载)
  6. go get golang.org/x 包下载失败问题
  7. PyTorch学习(8)-问答系统、文本摘要和大规模预训练语言模型
  8. python3中的property使用方法
  9. ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决
  10. jdk和jre是什么?都有什么用?