字典每个键分为多行

时间:2019-01-23 13:15:30

标签: python python-3.x pandas dictionary split

我很难将字典中的字符串拆分成DataFrame中的一个键的多行。到目前为止,我找不到合适的解决方案。任何帮助表示赞赏。

以下代码可以将字符串分成一行:

d_new = {k: dict(map(str.strip, x.split('||')) for x in v) for k, v in d.items()}

df = pd.DataFrame.from_dict(d_new, orient='index')

我的字典d看起来像这样:

{'Key1': ['A||1234', 'A||1235', 'A||1236', 'B||4567', 'C||78910'],
 'Key2': ['A||165', 'A||135', 'B||888', 'B||1111']}

我想拆分,以便Key1有3行(对于A的三个不同参数),而Key2有2行。

所需的输出:

Key|A|B|C
Key1|1234|4567|78910
Key1|1235|4567|78910
Key1|1236|4567|78910
Key2|165|888|
Key2|135|1111|

Edit1:对不起,我不知道如何在这里做一张桌子。我尽可能地添加了所需的输出。

1 个答案:

答案 0 :(得分:1)

问题是您需要为每个 字典值列表构造一个数据框。这是使用collections.defaultdict的解决方案:

d = {'Key1': ['A||1234', 'A||1235', 'A||1236', 'B||4567', 'C||78910'],
     'Key2': ['A||165', 'A||135', 'B||888', 'B||1111']}

from collections import defaultdict

def create_dataframe(k, x):
    dd = defaultdict(list)
    for item in x:
        key, value = item.split('||')
        dd[key].append(value)
    return pd.DataFrame.from_dict(dd, orient='index').T.assign(Key=k).ffill()

df = pd.concat(create_dataframe(*item) for item in d.items())

print(df)

      A     B      C   Key
0  1234  4567  78910  Key1
1  1235  4567  78910  Key1
2  1236  4567  78910  Key1
0   165   888    NaN  Key2
1   135  1111    NaN  Key2