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)
订单没有任何区别.
什么是快速的方法呢?
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)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |