Pandas逐行对比两列字符串字符是否匹配(忽略分隔符和顺序)
修改判断条件的方案
你可以直接将两列的分隔符移除后对字符排序,再对比是否相等即可,原if判断修改为如下内容:
if sorted(row['colA'].replace(' ', '')) == sorted(row['colB'].replace('|', '')):
逻辑说明
- 把
colA中的空格全部删除,得到仅含待对比字符的字符串 - 把
colB中的|分隔符全部删除,得到仅含待对比字符的字符串 - 对两个字符串的字符做排序后对比,自动忽略字符出现顺序的差异,只要字符种类和数量完全一致就会判定为匹配
修改后的完整函数
def match_or_not(df): for index,row in df.iterrows(): if sorted(row['colA'].replace(' ', '')) == sorted(row['colB'].replace('|', '')): print ("Match for "+str(row['id'])) else: print ("Not match for "+str(row['id']))
更高效的向量化实现(可选)
如果数据量较大,推荐用pandas向量化操作替代iterrows循环,性能提升更明显:
# 生成匹配结果列 df['is_match'] = df['colA'].str.replace(' ', '').apply(sorted) == df['colB'].str.replace('|', '', regex=False).apply(sorted) # 打印结果 for _, row in df.iterrows(): print(f"{'Match' if row['is_match'] else 'Not match'} for {row['id']}")
内容的提问来源于stack exchange,提问作者Fazli
相关产品推荐
相关产品推荐

