我从一个pandas数据框中创建一对行,以基于每对行进行一些计算,并创建一个新的数据框
affinity = []
for prod1 in data3.iterrows():
for prod2 in data3.iterrows():
if prod1[0] != prod2[0]:
pair = pd.concat([prod1[1],prod2[1]], axis=1)
total = max(np.count_nonzero(pair, axis=0))
match = pair[(pair.iloc[:, 0]==1) & (pair.iloc[:, 1]==1)]
prob = match.shape[0] / total
dat = [prod1[0],prod2[0],prob]
affinity.append(dat)
affinity = pd.DataFrame(affinity)
有没有一种更快的方法来做同样的事情?除了行本身,我必须检查所有可能的对。我知道有itertools.product,但我不知道如何将它用于数据帧的行。我看到了一些只有列表的用例
输入样本:
ticket1 ticket2 ticket3
class1 0 0 0
class2 0 1 0
class3 0 1 0
预期产出:
col1 col2 col3
class1 class2 0.0
class2 class3 1.0
class3 class1 0.0
这与协方差计算非常相似!让我们用numpy一步一步地做:
警告我假设您的数组中只有0和1,因为您检查的是与1和0的等式
现在有了矩阵形式的
affinity
!您可以将其加载回数据帧,然后stack使其看起来像您想要的输出,或者保持原样并显示一些相关矩阵编辑:添加如何准确获得预期结果:
相关问题 更多 >
编程相关推荐