代码之家  ›  专栏  ›  技术社区  ›  fatdragon

如何在pandas中使用多个列执行半连接?

  •  0
  • fatdragon  · 技术社区  · 6 年前

    >>> df1 = pd.DataFrame({'grp':[1,1,2], 'x':[6,4,2], 'y':[7,8,9]})
    >>> df1
       grp  x  y
    0    1  6  7
    1    1  4  8
    2    2  2  9
    
    >>> df2 = pd.DataFrame({'grp':[1], 'x':[6], 'z':[3]})
    >>> df2
       grp  x z
    0    1  6 3
    

    我认为用一个列就可以很容易地完成半连接。

    >>> df1[df1.grp.isin(df2.grp)]
       grp  x  y
    0    1  6  7
    1    1  4  8
    

    问题是:如何用两个列来实现这一点- grp x ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    试试看 tuple 你仍然可以 isin

    df1[df1[['grp','x']].agg(tuple,1).isin(df2[['grp','x']].agg(tuple,1))]
    Out[205]: 
       grp  x  y
    0    1  6  7