如何判断df1的number列值是否为df2对应列值的左侧前缀(Python)
判断DataFrame中值是否为另一个DataFrame值的严格左侧前缀并匹配对应值
我有两个DataFrame:
import pandas as pd df1=pd.DataFrame({'number': ['14578', '45621', '1564']}) df2=pd.DataFrame({'number': ['1457891521', '123456215', '15643']})
我需要判断df1['number']中的每个值是否是df2['number']中某个值的严格左侧前缀(即前缀长度小于目标值长度),并得到如下结果:
number full number 0 14578 1457891521 1 45621 0 2 1564 15643
解决方案
可以通过自定义函数结合apply方法实现需求,具体代码如下:
import pandas as pd df1 = pd.DataFrame({'number': ['14578', '45621', '1564']}) df2 = pd.DataFrame({'number': ['1457891521', '123456215', '15643']}) # 提取df2的编号列表,方便后续遍历 df2_numbers = df2['number'].tolist() def match_full_number(prefix): for num in df2_numbers: # 严格前缀条件:前缀长度小于目标值长度,且目标值以前缀开头 if len(prefix) < len(num) and num.startswith(prefix): return num # 无匹配项时返回'0' return '0' # 为df1新增匹配结果列 df1['full number'] = df1['number'].apply(match_full_number) print(df1)
关键说明
- 使用
str.startswith()快速判断字符串前缀匹配关系 - 增加长度判断
len(prefix) < len(num),确保是严格左侧前缀(避免前缀与目标值完全相等的情况) - 未找到匹配项时返回字符串'0',与期望输出格式一致
内容的提问来源于stack exchange,提问作者Aizhan Askhatova
相关产品推荐
相关产品推荐

