如何有效地填充由列表中的成对值组合组成的不完整的pandas数据帧?

Mel*_*uce 6 python numpy pandas

假设我有一个值列表,

lst=['orange','apple','banana', 'grape', 'lemon']
Run Code Online (Sandbox Code Playgroud)

我还有一个表格的pandas数据框df:

Source     Destination     Weight
orange     apple           0.4
banana     orange          0.67
grape      lemon           0.1
grape      banana          0.5
Run Code Online (Sandbox Code Playgroud)

行是lst中所有成对组合的子集.请注意,每个组合最多只出现一次.

我想要的是一个新的数据帧,其余的组合用值0填充.

例如,new_df:

Source     Destination     Weight
orange     apple           0.4
banana     orange          0.67
grape      lemon           0.1
grape      banana          0.5
orange     grape           0.0
orange     lemon           0.0
banana     lemon           0.0
Run Code Online (Sandbox Code Playgroud)

订单没有任何区别.

什么是快速的方法呢?

piR*_*red 5

  • 我创建了一组组合
  • 然后我对已经存在的组合做同样的事情
  • np.in1d用来找到那些不存在的
  • 然后添加一个新的数据框,其中包含尚不存在的数据框.

from itertools import combinations

comb = np.array([set(x) for x in combinations(lst, 2)])
exst = df[['Source', 'Destination']].apply(set, 1).values
new = comb[~np.in1d(comb, exst)]

d1 = pd.DataFrame(
    [list(x) for x in new],
    columns=['Source', 'Destination']
).assign(Weight=0.)

df.append(d1, ignore_index=True)

   Source Destination  Weight
0  orange       apple    0.40
1  banana      orange    0.67
2   grape       lemon    0.10
3   grape      banana    0.50
4   grape      orange    0.00
5  orange       lemon    0.00
6   apple      banana    0.00
7   grape       apple    0.00
8   apple       lemon    0.00
9  banana       lemon    0.00
Run Code Online (Sandbox Code Playgroud)