import pandas as pd

df_a = pd.DataFrame({'Number':[1,2,3,4,5,6,7,8],
                     'Column_A': ['C','E','G','L','E','N','P','R'],
                     'Column_B': ['D','F','H','M','Z','O','Q','S']})

df_b = pd.DataFrame({'Number':[1,2,3,4,5,6],
                     'Column_C': ['A','E','L','H','C','Q'],
                     'Column_D': ['B','F','M','G','F','P']})

mask = (((df_a['Column_A'].isin(df_b['Column_C'])) & (df_a['Column_B'].isin(df_b['Column_D']))) | ((df_a['Column_A'].isin(df_b['Column_D'])) & (df_a['Column_B'].isin(df_b['Column_C']))))

df_a[mask]

df_a

   Number Column_A Column_B
0       1        C        D
1       2        E        F
2       3        G        H
3       4        L        M
4       5        E        Z
5       6        N        O
6       7        P        Q
7       8        R        S

df_b

   Number Column_C Column_D
0       1        A        B
1       2        E        F
2       3        L        M
3       4        H        G
4       5        C        F
5       6        Q        P

df_a[mask]

   Number Column_A Column_B
1       2        E        F
2       3        G        H
3       4        L        M
6       7        P        Q
  • df_a中的Column_AColumn_B中找到df_b中的Column_CColumn_D
  • Column_C可以是Column_B,而Column_D可以是Column_A(AND-条件)

假设有更多的列需要"掩盖",那么病情就会变得非常长. 合并/加入或其他什么有更好的解决方案吗?

推荐答案

您可以将所选列aggregateset(每行)并使用相同的逻辑:

mask = (df_a[['Column_A', 'Column_B']].agg(set, axis=1)
        .isin(df_b[['Column_C', 'Column_D']].agg(set, axis=1))
       )

out = df_a[mask]

输出:

   Number Column_A Column_B
1       2        E        F
2       3        G        H
3       4        L        M
6       7        P        Q

中间体:

df_a[['Column_A', 'Column_B']].agg(set, axis=1)

0    {C, D}
1    {E, F}
2    {G, H}
3    {M, L}
4    {Z, E}
5    {N, O}
6    {P, Q}
7    {R, S}
dtype: object


df_b[['Column_C', 'Column_D']].agg(set, axis=1)

0    {B, A}
1    {E, F}
2    {M, L}
3    {G, H}
4    {C, F}
5    {P, Q}
dtype: object

Python-3.x相关问答推荐

将Trio与基于线程的事件侦听器混合使用

在Python中基于组/ID将两个数据帧进行映射,找出较接近的值

如何在 histplot 中标记核密度估计

如何键入提示函数,在 Python 中通过类decorator 添加到类中

有效地缩短列表,直到第一次和最后一次出现不同于 None 的值

无法使用 Python 和 Selenium 检索 href 属性

如何准确测定cv2的结果.在BW/黑白图像中查找对象?

排队多个子进程

合并两个numpy数组

如何禁用 pylint 禁止自用警告?

Python:pprint的模块错误,打印没有错误

如何使用pandas python获取数据框中每列的最大长度

asyncio.Semaphore RuntimeError: Task got Future 附加到不同的循环

Pandas 的 EMA 与股票的 EMA 不匹配?

如何将 cv2.imread 匹配到 keras image.img_load 输出

我可以替换 Python 中对象的现有方法吗?

带有数千个逗号刻度标签的 MatPlotLib 美元符号

将 Python 字节转换为无符号 8 位整数

首次使用后 zip 变量为空

在 PyCharm 中配置解释器:请使用不同的 SDK 名称