如何基于DataFrame中3列的片段信息创建新列?
解决DataFrame创建复合新列的问题
我来帮你搞定这个需求!咱们先把你的要求再明确拆解一下,确保每一步都覆盖到:
- 姓氏处理:先去掉所有非字母字符,处理后如果长度≥5就取前5个字符,不够的话直接用处理后的完整姓氏
- 名字部分:直接取前2个字符
- 最后把上面两部分和指定的代码拼接起来,形成新列
实现步骤(附代码示例)
假设你的DataFrame有last_name(姓氏)、first_name(名字)、code(要追加的代码)这三列,咱们用Pandas的字符串方法来高效实现,比用apply更快哦:
import pandas as pd # 先构造一个示例DataFrame,模拟你的数据 data = { 'last_name': ['O\'Connor', 'Smith123', 'VanDerSar', 'Lee', 'McDonald-Jones'], 'first_name': ['John', 'Emily', 'Peter', 'Amy', 'Michael'], 'code': ['X1', 'Y2', 'Z3', 'A4', 'B5'] } df = pd.DataFrame(data) # 创建新列,按要求拼接 df['combined_col'] = ( # 处理姓氏:去掉非字母字符,再取前5位(长度不足5自动取全部) df['last_name'].str.replace(r'[^a-zA-Z]', '', regex=True).str[:5] # 拼接名字前2位 + df['first_name'].str[:2] # 拼接代码 + df['code'] ) print(df)
代码解释
- 姓氏处理:
str.replace(r'[^a-zA-Z]', '', regex=True)用正则匹配所有非字母字符,替换为空;str[:5]自动适配长度——如果处理后的姓氏长度≥5就取前5位,不够的话直接返回完整字符串,完美符合你的要求。 - 名字截取:
str[:2]直接提取名字的前2个字符,简单高效。 - 拼接组合:用
+把三部分字符串直接拼接,生成最终的新列。
运行结果
上面的示例代码会输出这样的结果:
last_name first_name code combined_col 0 O'Connor John X1 CONNOJOX1 1 Smith123 Emily Y2 SMITHEMY2 2 VanDerSar Peter Z3 VANDEPEZ3 3 Lee Amy A4 LEEAMY4 4 McDonald-Jones Michael B5 MCDONMIB5
你可以把示例里的列名换成你实际的列名,直接套用就可以啦!
内容的提问来源于stack exchange,提问作者William Bernard
相关产品推荐
相关产品推荐

