使用Python Lambda函数实现列值匹配结果二值化(非零转1)
需求
计算二值结果:判断Pandas DataFrame两列中是否存在至少一个匹配项,存在则返回1,不存在则返回0。
最小可复现示例(MRE)
import pandas as pd df = pd.DataFrame({'col1':['a|b|c','a|b|c','a|b|c'],'col2':['b|d|e|a','d|e|f','a']}) # 当前代码仅计算交集长度,未转换为二值结果 df['new'] = df[['col1','col2']].apply(lambda x: len(set(x['col1'].split('|')).intersection(set(x['col2'].split('|')))),axis=1)
目标结果
期望得到包含二值结果的DataFrame:
pd.DataFrame({'col1':['a|b|c','a|b|c','a|b|c'],'col2':['b|d|e|a','d|e|f','a'],'new':[1,0,1]})
解决方案
通过在apply的lambda表达式中增加条件判断,将交集长度≥1的结果转为1,否则转为0:
import pandas as pd df = pd.DataFrame({'col1':['a|b|c','a|b|c','a|b|c'],'col2':['b|d|e|a','d|e|f','a']}) df['new'] = df[['col1','col2']].apply(lambda x: 1 if len(set(x['col1'].split('|')).intersection(set(x['col2'].split('|')))) >=1 else 0, axis=1)
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

