将一行中的每个值与 pandas 数据框中的其他行配对

Pair each value in a row with other rows in pandas dataframe

我有一个 500 行的数据框,排序如下:

Col1    Val1
asd     0.27
pqer    0.37
psdf    0.54

我正在尝试将 Col1 的每个值与 Col1 中具有更高 Val1 的另一行配对以获得以下列表:

[['asd', 'pqer'], ['asd','psdf'],['pqer','psdf']]

我不知道该怎么做。

尝试自我合并和过滤:

df.merge(df, how='cross')\
  .query('Val1_x < Val1_y')[['Col1_x','Col1_y']]\
  .to_numpy().tolist()

输出:

[['asd', 'pqer'], ['asd', 'psdf'], ['pqer', 'psdf']]

二分搜索可能比笛卡尔连接更有效(取决于数据大小); conditional_join from pyjanitor 可以提供帮助:

# pip install pyjanitor
import pandas as pd
import janitor


(df.conditional_join(df, ('Val1', 'Val1', '<'))
   .loc(axis=1)[:, 'Col1']
   .to_numpy()
   .tolist()
)

 [['asd', 'pqer'], ['asd', 'psdf'], ['pqer', 'psdf']]