DataFrame两列匹配:移除第二列与第一列重复的值
移除DataFrame第二列中存在于第一列的值
需求说明
给定一个DataFrame,需对其中两列进行匹配:如果第二列的某个值在第一列中存在,就将第二列里的这个值移除(替换为空/NaN)。
示例输入
col1 col2 1 2 1 3 9 4 5 1 6 2
示例输出
col1 col2 1 2 3 9 4 5 6
原因说明
第二列中的1和2都能在第一列里找到,所以要移除这些重复出现的值;而9不在第一列中,保留不动。
解决方案(Pandas实现)
可以用Pandas的isin()方法判断第二列的值是否存在于第一列,再用where()方法保留符合条件的值:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'col1': [1,2,3,4,5,6], 'col2': [pd.NA, 1, 9, pd.NA, 1, 2] }) # 处理逻辑:如果col2的值在col1中存在,就替换为NA(即移除) df['col2'] = df['col2'].where(~df['col2'].isin(df['col1'])) print(df)
这段代码的逻辑:
df['col2'].isin(df['col1']):生成布尔序列,标记col2中哪些值存在于col1里- 加
~取反,得到需要保留的值的标记 where()方法会把不满足取反后条件的位置替换为NaN,对应示例中的空值效果
内容的提问来源于stack exchange,提问作者parth
相关产品推荐
相关产品推荐

