我有一本这样的字典:
dictionary = {'user1':[{'product1':10}, {'product2':15}, {'product3': 20}],
'user2':[{'product1':13}, {'product2':8}, {'product3': 50}]}
我想构建一个数据框,在其中我可以将 user1 和 user2 视为索引,将 product1、product2 和 product3 视为列,这些产品的值应该是列的值。我试着在这里查看并找到了这篇文章 Construct pandas DataFrame from items in nested dictionary,但我的数据格式不同,我无法找到如何让产品成为我的专栏。到目前为止,我在第一行的第一列中将“'product1':10”作为我的值。使用 orient='index' 使我的主键成为索引,但就是这样。请帮帮我。
答案 0 :(得分:2)
一种选择是将 lists
的 dicts
合并为一个 dict
,然后构建一个 DataFrame.from_dict
:
import pandas as pd
from collections import ChainMap
dictionary = {'user1': [{'product1': 10}, {'product2': 15}, {'product3': 20}],
'user2': [{'product1': 13}, {'product2': 8}, {'product3': 50}]}
df = pd.DataFrame.from_dict(
{k: dict(ChainMap(*v)) for k, v in dictionary.items()},
orient='index'
)
df
:
product3 product2 product1
user1 20 15 10
user2 50 8 13
可选的带有 natsort
的字母数字排序:
from natsort import natsorted
df = df.reindex(columns=natsorted(df.columns))
product1 product2 product3
user1 10 15 20
user2 13 8 50
{k: dict(ChainMap(*v)) for k, v in dictionary.items()}
{'user1': {'product3': 20, 'product2': 15, 'product1': 10},
'user2': {'product3': 50, 'product2': 8, 'product1': 13}}