如何从dataframe两列提取指定字符拼接生成新列
多列字符提取拼接生成新变量实现方案
需求拆分如下:
- 拆分
name列的名、姓两部分,分别提取首字母 - 提取
zip列的最后两位字符 - 将三个提取结果拼接为
new.var列
以下是两种常用工具的实现代码:
R语言(tidyverse 实现)
library(tidyverse) # 构造示例数据 df <- tibble( name = c("Mike Tyson", "Mohammed Ali", "Joe Frazier", "Floyd Mayweahter"), zip = c(13756, 54412, 47463, 34134) ) # 生成新变量 df <- df %>% mutate( # 提取名、姓的首字母并拼接 name_init = str_replace(name, "(^[A-Z]).*\\s([A-Z]).*", "\\1\\2"), # 提取zip末尾两位,数值型zip需先转字符 zip_end = str_sub(as.character(zip), -2), new.var = paste0(name_init, zip_end) ) %>% # 可选:删除中间辅助列 select(-name_init, -zip_end)
执行后即可得到符合要求的结果。
Python(pandas 实现)
import pandas as pd # 构造示例数据 df = pd.DataFrame({ "name": ["Mike Tyson", "Mohammed Ali", "Joe Frazier", "Floyd Mayweahter"], "zip": [13756, 54412, 47463, 34134] }) # 生成新变量 df["new.var"] = ( # 提取名的首字母 df["name"].str.split().str[0].str[0] + # 提取姓的首字母 df["name"].str.split().str[1].str[0] + # 提取zip末尾两位,数值型zip需先转字符 df["zip"].astype(str).str[-2:] )
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

