从df创建字典的正确方法或计算jaccard相似度的方法

时间:2019-07-10 09:47:51

标签: python pandas dictionary

我有一个包含8000列的df。每列(第一列除外)表示二进制值0或1。

|Name| t1| t2| t3|...| t4|  
| ..aa.. | 0 | 0 | 1 |...| 0 |  
| ..bb.. | 0 | 0 | 0 |...| 0 |  
| ..cc.. | 1 | 0 | 0 |...| 0 |

我的目标是为需要存储在列表中的值计算aa,bb,cc之间的jaccard索引,这就是为什么我要使用字典。

字典必须看起来像这样:

{'aa': [0,0,1,...,0], 'bb': [0,0,0,...,0],...}

当dict key = df索引和值是代表列表的行时,如何获得这样的结果?

3 个答案:

答案 0 :(得分:2)

您可以通过压缩Name列和数据框的其余部分,并从生成的元组中调用dict构造函数来构建字典:

dict(zip(df.Name, df.loc[:,'t1':].values.tolist()))
# dict(zip(df.index, df.loc[:,'t1':].values.tolist())) # if name is the index
# {'aa': [0, 0, 1, 0], 'bb': [0, 0, 0, 0], 'cc': [1, 0, 0, 0]}

输入数据:

   Name    t1     t2     t3     t4
0   aa      0      0      1      0
1   bb      0      0      0      0
2   cc      1      0      0      0

答案 1 :(得分:2)

另一种方法:

{k: list(v.values()) for k, v in df.set_index('Name').to_dict('index').items()}

答案 2 :(得分:1)

Name设置为索引并转置,然后执行.to_dict()

df.set_index('Name').T.to_dict('list')

如果Name是索引,则只需执行以下操作:

df.T.to_dict('list')

{'aa': [0, 0, 1, 0], 'bb': [0, 0, 0, 0], 'cc': [1, 0, 0, 0]}