列值为ID的列

时间:2018-07-27 00:52:43

标签: python dictionary datatables multiple-columns

给出一个具有给定值的数据框表,我想将其转换为另一个表和字典。

转换此:

id    type
a     x
a     y
a     y
b     z

对此:

id  x   y   z
a   1   2   0
b   0   0   1 

以表格格式和字典。

dict = {{a:{x:1, y:2, z:0}},{b:{x:1,y:2,z:0}}}

谢谢!

2 个答案:

答案 0 :(得分:0)

假设您将表格作为元组列表加载,请使用collections.Counter计算每个元组的出现次数,然后将其转换为所需的dict输出,同时继续跟踪集合中的唯一类型,最后用字典中的零填充每个id中缺少的类型键。

from collections import Counter
l = [('a', 'x'), ('a', 'y'), ('a', 'y'), ('b', 'z')]
d = {}
k = set()
for t, c in Counter(l).items():
    d.setdefault(t[0], {})[t[1]] = c
    k.add(t[1])
for v in d.values():
    for m in k.difference(v):
        v.update({m: 0})
print(d)

这将输出:

{'a': {'x': 1, 'y': 2, 'z': 0}, 'b': {'z': 1, 'x': 0, 'y': 0}}

答案 1 :(得分:0)

您可以使用此:

pd.get_dummies(df1.set_index('id'), 
               columns=['type'], 
               prefix='', prefix_sep='')\
  .sum(level=0)\
  .to_dict(orient='index')

输出:

{'a': {'x': 1, 'y': 2, 'z': 0}, 'b': {'x': 0, 'y': 0, 'z': 1}}