我有一个包含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索引和值是代表列表的行时,如何获得这样的结果?
答案 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]}