【问题标题】:Calculating Pair wise distance for each instance using for loop使用 for 循环计算每个实例的成对距离
【发布时间】:2021-10-18 17:59:22
【问题描述】:

我有一个看起来像这样的数据框

我想使用 for 循环为每个实例创建一个具有成对距离的新数据框 我使用以下代码创建成对距离

list=[]            
list2=[]            
list3=[]                
for i in df.index:   
    for j in df.index:             
        list.append(i)             
        list2.append(j)               
        
for z in range(0,5):
    for y in range(0,5):
        list3.append(distance.jaccard(df.iloc[z],df.iloc[y]))


Se=pd.Series(list)
Se2=pd.Series(list2)
Se3=pd.Series(list3)
df1=pd.DataFrame({'A':Se,'B':Se2,'Distance':Se3})

但我的结果是

预期输出

A-B-Distance                    
Instance_0 - Instance_1- 0.5           
Instance_0 - Instance_2 - 0.0         
Instance_0 - Insatnce_3 - 0.5       
Instance_0 - Instance_4 -0.5       
Instance_1 - Instance_2 - 0.5       
Instance_1 - Instance_3 - 0.0          
Insatnce_1 - Instance_4 - 1.0          
Instance_2 - Instance_3 - 0.5            
Instance_2 - Instance_4 - 0.5           
instance_3 - Instance_4 - 1.0       
    

【问题讨论】:

  • 总是将代码、数据和完整的错误消息作为文本(不是截图,不是链接)放在有问题的地方(不在评论中)。
  • 你必须描述你的输出和预期输出之间的差异。输出很长,我们可能看不到差异 - 我们无法在您的脑海中阅读。
  • 对于普通列表,它需要在第二个 for-loop 中使用第一个索引 - for ... in range(first_index, n) 而不是 for ... in range(n) - 这应该跳过像 (1,0) 这样的对,因为你已经有对 @ 987654329@

标签: python pandas dataframe for-loop


【解决方案1】:

如果我了解输出之间的区别,您希望跳过 (a,a) 之类的对并保留 (a,b) 但删除 (b,a)

只需在第二个for-loop 中,您必须使用range(z+1, 5) 而不是range(0, 5)

for z in range(0, 5):
    for y in range(z+1, 5):
        print(z, y)

结果:

0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2016-04-06
    • 2021-03-09
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多