python - 根据另一个数据框的多列过滤数据框

标签 python pandas

我有一个这样的数据框:

    ID1    ID2
0   foo    bar
1   fizz   buzz

还有一个像这样:

    ID1    ID2    Count    Code   
0   abc    def      1        A
1   fizz   buzz     5        A
2   fizz1  buzz2    3        C
3   foo    bar      6        Z
4   foo    bar      6        Z

我想做的是过滤第二个数据帧,其中 ID1 和 ID2 与第一个数据帧中的一行匹配,每当有匹配时,我想从第一个数据帧中删除该行以避免重复。这将产生一个如下所示的数据框:

    ID1    ID2    Count    Code   
1   fizz   buzz     5        A
3   foo    bar      6        Z

我知道我可以通过嵌套 for 循环、逐行遍历所有行并在每次匹配时手动从第一帧中删除一行来做到这一点,但我想知道是否有更 pythonic 的方法来做到这一点。我对 Pandas 没有经验,所以可能有一种我不知道的更简洁的方法。我以前使用过 .isin() 但不得不放弃它。每个 ID 对最多可以在数据帧中存在 N 次,我需要过滤后的帧包含一对 ID 的 0 到 N 个实例。

最佳答案

使用 mergedrop_duplicates , 如果只有相同的列用于加入 df:

df = pd.merge(df1,df2.drop_duplicates())
print (df)
    ID1   ID2  Count Code
0   foo   bar      6    Z
1  fizz  buzz      5    A

如果只需要检查 ID 列中的重复项:

df = pd.merge(df1,df2.drop_duplicates(subset=['ID1','ID2']))
print (df)
    ID1   ID2  Count Code
0   foo   bar      6    Z
1  fizz  buzz      5    A

如果更多的列重叠添加参数on:

df = pd.merge(df1, df2.drop_duplicates(), on=['ID1','ID2'])

如果不删除重复行:

df = pd.merge(df1,df2)
print (df)
    ID1   ID2  Count Code
0   foo   bar      6    Z
1   foo   bar      6    Z
2  fizz  buzz      5    A

关于python - 根据另一个数据框的多列过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440523/

相关文章:

python - 将列表转换为 Python Dataframe 中的列

python - 如何将透明颜色应用于 XLSXWriter 中的单元格?

python - GroupBy 对象,其中条目可以属于多个组

python - SQLAlchemy 还是 psycopg2?

python - 使用python通过windows服务打开另一个程序

python - SMOTE - 无法将字符串转换为 float

python - 循环数据帧以限制并求和另一个数据帧

python - 如何使用 Pandas 按照定义的规则填充某些单元格?

Python-在保持前导零的同时将字符串转换为整数

python - 将 `app.add_route()` 用于 GraphQL 时,如何在 FastAPI 中获取用户身份验证信息?