pandas dataframe,多索引,到字典

pandas dataframe, with multi-index, to dictionary

我正在尝试转换由 groupby([columns]) 产生的 pandas 数据帧。生成的索引将针对每个“target_index”不同的单词列表(下图中的示例)。用 to_dict() 转换它似乎不能直接工作(我尝试了几个东方参数)。

输入数据帧:

期望的输出(示例中只有两个键):

{
"2060": {
    "NOUN": ["product"]
},
"3881": {
    "ADJ": ["greater", "direct", "raw"],
    "NOUN": ["manufacturing", "capital"],
    "VERB": ["increased"]
}

}

为了重新创建以下数据集:

df= pd.DataFrame([
        ["2060", "NOUN", ["product"]],
        ["2060", "ADJ", ["greater"]],
        ["3881", "NOUN", ["manufacturing", "capital"]],
        ["3881", "ADJ", ["greater", "direct", "raw"]],
        ["3881", "VERB", ["increased"]]
], columns= ["a", "b", "c"])
    
df= df.groupby(["a", "b"]).agg({"c": lambda x: x})

构造函数中给出的输入与图像中的不同。我在构造函数中使用了输入。您可以在 groupby.apply 中使用 lambda 将每个组转换为字典,然后将聚合转换为字典:

out = df.groupby(level=0).apply(lambda x: x.droplevel(0).to_dict()['c']).to_dict()

另一种选择是使用 itertuples 和 dict.setdefault:

out = {}
for (ok, ik), v in df.itertuples():
    out.setdefault(ok, {}).setdefault(ik, []).extend(v)

输出:

{'2060': {'ADJ': ['greater'], 'NOUN': ['product']},
 '3881': {'ADJ': ['greater', 'direct', 'raw'],
  'NOUN': ['manufacturing', 'capital'],
  'VERB': ['increased']}}