如果行的元素构成两列之间所有可能的对,则选择行

Hap*_*yPy 0 python pandas

df=pd.DataFrame({'col1':['a','a','b','b','c'],'col2':['x','y','x','y','x']})
Run Code Online (Sandbox Code Playgroud)

我想为 中的每个字母选择那些与 的col1字母所有可能配对的行col2。在这个例子中应该是

  col1 col2
0    a    x
1    a    y
2    b    x
3    b    y
Run Code Online (Sandbox Code Playgroud)

因为这对[c y]失踪了。

Qua*_*ang 5

尝试交叉表查找组合,检查是否存在all,然后使用isin切片:

s = pd.crosstab(df.col1, df.col2).eq(1).all(1)
df.loc[df['col1'].isin(s[s].index)]
Run Code Online (Sandbox Code Playgroud)

输出:

  col1 col2
0    a    x
1    a    y
2    b    x
3    b    y
Run Code Online (Sandbox Code Playgroud)