为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2021-04-29 06:27:24
我有一个看起来像df的数据框    1   2   3   4   50   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}非常感谢您的帮助
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

这似乎可以解决问题:


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] = v


print(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列匹配。)


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信