猿问

根据列表和熊猫数据框制作字典

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


    1   2   3   4   5

0   1   1   1   0   0 

1   1   1   0   0   0 

2   1   0   0   1   1 

3   1   1   0   1   0 

4   0   1   1   0   0 

还有一本字典,看起来像


dict = {(1, 2): 0,

       (1, 3): 0,

       (1, 4): 0,

       (1, 5): 0,

       (2, 1): 0,

       (2, 3): 0,

       (2, 4): 0,

       (2, 5): 0,

       (3, 1): 0,

       (3, 2): 0,

       (3, 4): 0,

       (3, 5): 0,

       (4, 1): 0,

       (4, 2): 0,

       (4, 3): 0,

       (4, 5): 0,

       (5, 1): 0,

       (5, 2): 0,

       (5, 3): 0,

       (5, 4): 0}

我想要两件事:首先,如果key(i,j)= key(j,i)删除它,例如:key(1,2)和key(2,1)我想删除(2,1),所以最后一个字典将


dict = {(1, 2): 0,

       (1, 3): 0,

       (1, 4): 0,

       (1, 5): 0,

       (2, 3): 0,

       (2, 4): 0,

       (2, 5): 0,

       (3, 4): 0,

       (3, 5): 0,

       (4, 5): 0}

第二个我想更新数据帧df的值,如果作为dict中的键的列具有相同的值(即1),例如:1和2列的key(1,2)在同一行中有1次3因此key(1,2)的值将更新为3,依此类推..因此,最终的dict将是


dict = {(1, 2): 3,

       (1, 3): 1,

       (1, 4): 2,

       (1, 5): 1,

       (2, 3): 2,

       (2, 4): 1,

       (2, 5): 0,

       (3, 4): 0,

       (3, 5): 0,

       (4, 5): 1}

非常感谢您的帮助


收到一只叮咚
浏览 148回答 2
2回答

梦里花落0921

这似乎可以解决问题:d_1 = {(1, 2): 0,       (1, 3): 0,       (1, 4): 0,       (1, 5): 0,       (2, 1): 0,       (2, 3): 0,       (2, 4): 0,       (2, 5): 0,       (3, 1): 0,       (3, 2): 0,       (3, 4): 0,       (3, 5): 0,       (4, 1): 0,       (4, 2): 0,       (4, 3): 0,       (4, 5): 0,       (5, 1): 0,       (5, 2): 0,       (5, 3): 0,       (5, 4): 0}new_keys = []for k in d_1:    invert = (k[1], k[0])    if invert not in new_keys:        new_keys.append(k)d_2 = {}for k in new_keys:    d_2[k] = d_1[k]df = [  [1,  1,  1,  0,  0],  [1,  1,  0,  0,  0],  [1,  0,  0,  1,  1],  [1,  1,  0,  1,  0],  [0,  1,  1,  0,  0],]d_3 = {}for k in d_2:    v = 0    c1, c2 = k[0] - 1, k[1] - 1    for line in df:        if line[c1] == line[c2]:            v += 1    d_3[k] = vprint(d_3)输出:{(1, 2): 3, (1, 3): 1, (1, 4): 3, (1, 5): 2, (2, 3): 3, (2, 4): 1, (2, 5): 0, (3, 4): 1, (3, 5): 2, (4, 5): 4}(看来您的示例至少有一个错误:您的结果(1,4)应该为3,而不是2,因为第2、3和4行与第1和4列匹配。)
随时随地看视频慕课网APP

相关分类

Python
我要回答