本文共 2810 字,大约阅读时间需要 9 分钟。
在数据处理领域,dfply和dplyr提供了丰富的函数来帮助数据分析和转换。以下将从几个核心函数入手,帮助大家更好地理解和使用这些工具。
主要有两个函数,mutate()和transmute(),两者在Python和R上使用方法相同,但有细微差别。
from dfply import *import pandas as pd# 使用mutate()新增列diamonds >> mutate(x_plus_y = X.x + X.y, xyz = X.x * X.y * X.z) >> head(5)# 使用transmute()新增列diamonds >> transmute(x_plus_y = X.x + X.y, xyz = X.x * X.y * X.z) >> head(5)
library(dplyr)# 使用mutate()新增列diamonds %>% mutate(x_plus_y = x + y, xyz = x * y * z) %>% head(5)# 使用transmute()新增列diamonds %>% transmute(x_plus_y = x + y, xyz = x * y * z) %>% head(5)
在处理条件数据时,if_else()、case_when()和between()函数是日常工作中的重要工具,尤其在评分卡WOE(Weight of Evidence)赋值时非常实用。
if_else()用于非A即B的逻辑判断。
diamonds >> mutate(price_class = if_else(X.price > 2000, 'A', 'A-')) >> distinct(X.price_class)
diamonds %>% mutate(price_class = if_else(price > 2000, 'A', 'A-')) %>% distinct(price_class)
case_when()用于多条件赋值,适合WOE评分卡。
diamonds >> mutate(price_class = case_when([X.price > 2000, 'A'], [X.price > 1500, 'B'], [X.price > 1000, 'C'], [True, 'D'])) >> distinct(X.price_class)
diamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A', price > 1500 ~ 'B', price > 1000 ~ 'C', TRUE ~ 'D')) %>% distinct(price_class)
between()用于区间判断,适用于特定范围内的条件。
diamonds >> mutate(price_class = case_when([X.price > 2000, 'A'], [between(X.price, 1500, 2000), 'B'], [between(X.price, 1000, 1500), 'C'], [True, 'D'])) >> distinct(X.price_class)
diamonds %>% mutate(price_class = case_when(price > 2000 ~ 'A', between(price, 1500, 2000) ~ 'B', between(price, 1000, 1500) ~ 'C', TRUE ~ 'D')) %>% distinct(price_class)
bind_rows()和bind_cols()用于数据的行或列拼接。
diamonds2 = diamonds >> head(2)diamonds3 = diamonds >> tail(3)diamonds2 >> bind_rows(diamonds3)
diamonds4 = diamonds >> select(1, X.carat, 'cut', -1)diamonds5 = diamonds >> select('x', 'y')diamonds4 >> bind_cols(diamonds5) >> head(5) diamonds2 = diamonds %>% head(2)diamonds3 = diamonds %>% tail(3)diamonds2 %>% bind_rows(diamonds3)diamonds4 = diamonds %>% select(1, carat, cut, dim(diamonds)[2])diamonds5 = diamonds %>% select(x, y)diamonds4 %>% bind_cols(diamonds5) %>% head(5)
inner_join()、left_join()和right_join()用于数据的内连接、左连接和右连接。
a = pd.DataFrame({ 'x1': ['A', 'B', 'C'], 'x2': [1, 2, 3]})b = pd.DataFrame({ 'x1': ['A', 'B', 'D'], 'x3': [True, False, True]})a >> inner_join(b, by='x1')a >> left_join(b, by='x1')a >> right_join(b, by='x1') 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))a %>% inner_join(b, by = 'x1')a %>% left_join(b, by = 'x1')a %>% right_join(b, by = 'x1') 注意:在R语言中,可以使用XXX_join(a, b, by)形式,而Python中不支持这种写法。
转载地址:http://umtfk.baihongyu.com/