python - 根据所选列过滤重复的行并与 Pandas 中的另一个数据框进行比较

标签 python python-3.x pandas dataframe

给定两个数据框如下:

import pandas as pd 

# Creating a DataFrame object   
df1 = pd.DataFrame([('Stuti', 28, 'Varanasi'), 
            ('Saumya', 32, 'Delhi'), 
            ('Aaditya', 25, 'Mumbai'), 
            ('Saumya', 32, 'Delhi')],  
                   columns = ['Name', 'Score', 'City']) 

df2 = pd.DataFrame([('Saumya', 32, 'Delhi'), 
            ('Saumya', 32, 'Mumbai'), 
            ('Aaditya', 40, 'Mumbai'), 
            ('Seema', 32, 'Delhi')],  
                   columns = ['Name', 'Score', 'City'])

我如何为 df2 创建掩码以根据 df1 和列 NameCity 过滤重复的行>,如果df1中存在相同的配对,则返回checkDuplicated,否则返回None

预期的结果会是这样的:

    Name  Score      City       Check
0   Saumya     32     Delhi  Duplicated
1   Saumya     32    Mumbai        None
2  Aaditya     40  Dehradun  Duplicated
3    Seema     32     Delhi        None

更新代码:

df = pd.concat([df1, df2])

df[df.duplicated(['Name', 'City'])] 

输出:

      Name  Score    City
3   Saumya     32   Delhi
0   Saumya     32   Delhi
2  Aaditya     40  Mumbai

最佳答案

In [65]: df2.merge(df1[['Name', 'City']].drop_duplicates(), how='left', indicator='Check').assign(Check=lambda x: np.where(x['Check'] == 'both', 'Duplicated', None))
Out[65]:
      Name  Score    City       Check
0   Saumya     32   Delhi  Duplicated
1   Saumya     32  Mumbai        None
2  Aaditya     40  Mumbai  Duplicated
3    Seema     32   Delhi        None

关于python - 根据所选列过滤重复的行并与 Pandas 中的另一个数据框进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65559950/

相关文章:

python - 在python中计算股票的平衡量(OBV)

python - 找不到 crypt 模块(python3.7)

python - 如何设置 if 语句以使用条件数组作为 python 中的输入

python-3.x - 如何在 android studio 中配置 Python 解释器

python - 匹配两个表(明细表到小计表),同时识别明细表中不匹配的项目

python - 为什么速记赋值和 NaN 有不同的行为?

python - 有没有办法将 python 棋盘转换为整数列表?

python - 这是我的函数或 Python 中的 docx.Document 的缺陷吗

python-3.x - 如果不是 NaN,Pandas 从列中获取值

python - 创建 pandas DataFrame 时将 'name' 属性添加到行和列名称