我有一个包含两列的 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”值
最佳答案
这是因为A
列有重复的条目,在创建字典时,它尝试使用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']}
关于python - 数据帧到字典的问题,而单个键中有多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59484927/