如何基于两列交集分离Pandas DataFrame列中的非共同字符?
提取DataFrame两列的非共同后缀字符
这问题我之前也碰到过,完全不用写循环逐字符检查,用Pandas的字符串矢量化操作就能轻松搞定,而且效率还高。
方案一:用str.replace直接替换共同前缀
核心思路是把number列转成字符串,然后将nums列里对应的前缀部分替换为空,剩下的就是你要的额外字符:
import pandas as pd values = { 'number': [2830, 8457, 9234], 'nums': ['2830S', '8457M', '923442'] } df = pd.DataFrame(values, columns=['number', 'nums']) # 第一步:将number列转为字符串类型,和nums列格式统一 df['number_str'] = df['number'].astype(str) # 第二步:替换掉nums里的共同前缀,得到额外字符 df['extra_chars'] = df['nums'].str.replace(df['number_str'], '', regex=False)
这里一定要加上regex=False参数,避免把数字当成正则表达式的特殊字符处理(虽然这次都是纯数字,但养成好习惯能避免后续踩坑)。运行后df['extra_chars']的结果就是['S', 'M', '42'],完全符合需求。
方案二:利用字符串切片
如果确定额外字符始终在共同部分之后,也可以通过计算共同部分的长度,直接切片提取后缀:
df['extra_chars'] = df.apply(lambda row: row['nums'][len(str(row['number'])):], axis=1)
不过这种方法用了apply,在数据量很大的时候,效率会比第一种矢量化的str.replace低一些,所以更推荐第一种方案。
内容的提问来源于stack exchange,提问作者iPythonlab
相关产品推荐
相关产品推荐

