Python Excel列对比:按特定规则标记结果求助
解决方案:用Pandas实现你的Excel列判断逻辑
你用的Pandas完全能搞定这个需求,不需要额外库。先拆解你的规则,用向量化操作实现,比循环高效得多:
步骤说明
- 优先判断下划线情况:只要Rosyi或Azmi任意一列包含“_”,直接标记为
other - 再判断HTTP匹配情况:如果两列都包含“http”且内容完全一致,标记为
agreed - 剩余情况:你没指定规则,这里默认标记为
disagreed,可以根据实际需求修改
完整代码
import pandas as pd import numpy as np # 读取Excel文件 df = pd.read_excel('rosyi.xlsx') # 定义判断条件 has_underscore = (df['Rosyi'].str.contains('_', na=False)) | (df['Azmi'].str.contains('_', na=False)) both_http_and_equal = (df['Rosyi'].str.contains('http', na=False)) & (df['Azmi'].str.contains('http', na=False)) & (df['Rosyi'] == df['Azmi']) # 按优先级执行多条件判断 df['Diff'] = np.where(has_underscore, 'other', np.where(both_http_and_equal, 'agreed', 'disagreed')) # 查看处理结果 print(df)
关键细节解释
str.contains('_', na=False):检查字符串是否包含下划线,na=False是把空值统一判定为“不包含”,避免空值导致的报错- 嵌套
np.where是按规则优先级执行:先处理下划线的情况,再处理HTTP匹配的情况,最后覆盖剩余所有情况 - 你原来的代码
df['Rosyi'] & df['Azmi']是把列当成布尔值做逻辑运算,根本没检查内容里的下划线或http,所以结果不符合预期
可选调整
如果你的数据里有空值需要特殊处理,比如空值也标记为other,可以在has_underscore条件里加上空值判断:(df['Rosyi'].isna()) | (df['Azmi'].isna())
内容的提问来源于stack exchange,提问作者Muhammad Faruq
相关产品推荐
相关产品推荐

