【问题标题】:How to create dataframe from dictionary having list of dictionaries?如何从具有字典列表的字典创建数据框?
【发布时间】:2023-02-05 04:27:46
【问题描述】:

我有一本字典:

adict = {'dic1': [{'a': True, 'b': False, 'c': True, 'd': True, 'z': False}],
         'dic2': [{'e': True, 'f': False, 'g': False}]}

如何以这种格式创建数据框?

True False
dic1 a b
c z
d
dic2 e f
g

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    尝试这个:

    (pd.DataFrame({i:j[0] for i,j in adict.items()})
    .stack()
    .to_frame().rename_axis(['d',None])
    .assign(cc = lambda x: x.groupby([pd.Grouper(level=1),0]).cumcount())
    .reset_index(level=0)
    .set_index([0,'cc'],append=True)['d']
    .unstack(level=1)
    .droplevel(1)
    .sort_index(axis=1,ascending=False))
    

    或者

    d2 = {True:[],False:[]}
    
    for k,v in d.items():
        for k2,v2 in v[0].items():
            d2.get(v2).append((k,k2))
    
    (v := pd.DataFrame(d2).stack()).to_frame('s').set_index(v.str[0],append=True)['s'].str[-1].unstack(level=1).reset_index(level=0,drop=True)
    

    输出:

    0    True False
    dic1    a     b
    dic1    c     z
    dic1    d   NaN
    dic2    e     f
    dic2  NaN     g
    

    【讨论】:

    • 谢谢,这很有用,但是有没有办法停止重复 dic1 和 dic2,只是将 dic1 合并在一行中,将 True 和 False 列的值保持在单独的行中?如果可能的话,那将是一个巨大的帮助。基本上,我的实际字典非常大,如果变量 dic1 和 dic2 重复,数据帧将不会有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多