如何使用Pandas基于两列值匹配创建0/1条件列?
在Pandas中根据两列匹配情况创建新列
你可以通过以下几种简洁高效的方式实现需求,优先推荐向量化操作以保证处理性能:
方法一:直接比较列并转换为整数
Pandas中布尔值True转为整数是1,False转为整数是0,因此直接对两列的比较结果做类型转换即可:
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({ 'col1': [1, 2, 3, 4], 'col2': [1, 3, 3, 5] }) # 创建第三列 df['match'] = (df['col1'] == df['col2']).astype(int)
执行后DataFrame的结果:
col1 col2 match 0 1 1 1 1 2 3 0 2 3 3 1 3 4 5 0
方法二:使用numpy.where函数
如果后续需要扩展更复杂的条件逻辑,可以用numpy.where实现:
import pandas as pd import numpy as np df = pd.DataFrame({ 'col1': [1, 2, 3, 4], 'col2': [1, 3, 3, 5] }) df['match'] = np.where(df['col1'] == df['col2'], 1, 0)
得到的结果与方法一完全一致。
注意事项
- 避免使用
df.apply逐行处理的方式(比如df.apply(lambda x: 1 if x['col1'] == x['col2'] else 0, axis=1)),这种方法在数据量较大时效率极低,远不如上述向量化操作。 - 如果列中存在缺失值
NaN,==比较会返回False,若需特殊处理缺失值,可结合pd.isna补充判断逻辑。
内容的提问来源于stack exchange,提问作者Commerce Session
相关产品推荐
相关产品推荐

