Pandas:所有行无序无替换的组合

Pandas: Combination of all rows without order and without replacement

我想获得 pandas.DataFrame 中所有可能的行组合,但没有替换且没有顺序。

我可以完成第一部分(无需替换):

df = pd.DataFrame({'data': ['a', 'b'], 'actual_key': [1, 2], 'dummy_key': [0, 0]})
df_combs = pd.merge(df, df, on='dummy_key')
df_combs = df_combs[df_combs['actual_key_x'] != df_combs['actual_key_y']]

>> df_combs
>> a    1   0   b   2
>> b    2   0   a   1

但我无法删除多余的行(无顺序)。

看起来你可以避免使用虚拟键并将 DF 交叉连接到自身,过滤掉相同的 x 和 y 值,然后创建一个新键来识别重复项,方法是将两个键都放在 frozenset 中(这是可散列的),然后在该键上删除重复项,例如:

(
    df.merge(df, how='cross')
    .query('actual_key_x != actual_key_y')
    .assign(dupekey=lambda v: v[['actual_key_x', 'actual_key_y']].apply(frozenset, axis=1))
    .drop_duplicates(subset=['dupekey'])
    .drop(columns=['dupekey'])
)