python - 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”值
解决方案
那是因为 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']}
推荐阅读
- azure-logic-apps - 我的逻辑应用 ARM 模板中的这个 Common Service Connector“id”是什么,我需要对其进行标记吗?
- linux - 有没有办法列出打开的文件并按修改时间的升序对它们进行排序?
- javascript - 使用节点 js 将十六进制编码的 iso 8583 消息转换为 json
- php - 如何在特定字符之后将字符串插入字符串?
- laravel - Laravel 中的 create() 和 insert() 有什么区别
- bash - 将路径传递给“。” 生成文件中的源
- presto - 无法在 presto-cli 中连接端口 8080
- python - 单元测试一个使用来自 django rest api 视图的请求的函数
- excel - 如何用一个 Excel 公式求和动态行总计?
- powershell - Windows 上的 PowerShell:“此平台不支持 Windows 数据保护 API (DPAPI)。”