首页 > 解决方案 > DataFrame 到 Dictionary 的问题,而单个键中有多个值

问题描述

我有一个包含两列的 DataFrame。我想将此 DataFrame 转换为 python 字典。

数据框:

df= pd.DataFrame({"A":["A1","A1","A2"], "B":["B1","B2","B3"]})
print(df)

我尝试使用以下代码将 DataFrame 转换为字典,其中A列作为键,B作为值:

df.set_index('A').T.to_dict('list')

输出就像

{'A1':['B2'],'A2':['B3']}

我不明白为什么“B1”不在列表中?以及如何在与“A1”键配对的列表中获得这个“B1”值

标签: pythondataframedictionary

解决方案


那是因为 columnA有重复的条目,在创建一个 dict 时,它尝试设置两个键A1,因此第一个值被覆盖。如果您有这样的事情,那将不是问题:

>>> df= pd.DataFrame({"A":["A1","A2","A3"], "B":["B1","B2","B3"]})
>>> df.set_index('A').T.to_dict(orient='list')
{'A1': ['B1'], 'A2': ['B2'], 'A3': ['B3']}

编辑

正在发生的事情与此接近:

dict_ = {}
for key, val in zip(["A1","A1","A2"], ["B1","B2","B3"]):
    print(key, val)
    dict_[key] = val
    print(dict_)

输出:

A1 B1
{'A1': 'B1'}
A1 B2
{'A1': 'B2'}
A2 B3
{'A1': 'B2', 'A2': 'B3'}

相反,你可以试试这个:

>>> df.groupby('A').agg(list).T.to_dict(orient='list')
{'A1': [['B1', 'B2']], 'A2': [['B3']]}

或者,

>>> df.groupby('A').agg(list).T.to_dict(orient='records')[0]
{'A1': ['B1', 'B2'], 'A2': ['B3']}

推荐阅读