我不明白为什么
B2您的字典中没有。我也不确定在重复的列值的情况下要发生什么(我是说除最后一个列之外的所有列。)假设第一个是一个疏忽,我们可以使用递归:
def recur_dictify(frame): if len(frame.columns) == 1: if frame.values.size == 1: return frame.values[0][0] return frame.values.squeeze() grouped = frame.groupby(frame.columns[0]) d = {k: recur_dictify(g.ix[:,1:]) for k,g in grouped} return d
产生
>>> df name v1 v2 v30 A A1 A11 11 A A2 A12 22 B B1 B12 33 C C1 C11 44 B B2 B21 55 A A2 A21 6>>> pprint.pprint(recur_dictify(df)){'A': {'A1': {'A11': 1}, 'A2': {'A12': 2, 'A21': 6}}, 'B': {'B1': {'B12': 3}, 'B2': {'B21': 5}}, 'C': {'C1': {'C11': 4}}}
不过,使用非熊猫方法可能会更简单:
def retro_dictify(frame): d = {} for row in frame.values: here = d for elem in row[:-2]: if elem not in here: here[elem] = {} here = here[elem] here[row[-2]] = row[-1] return d
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)