python - 数据帧到字典的问题,而单个键中有多个值

标签 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”值

最佳答案

这是因为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/

相关文章:

python - 如何将项目分组到 1-10 的桶中?

python - 将列值拆分为一对一映射

python pandas dataframe - 无法弄清楚如何查找给定 df 值的索引

c++ - 如何从 C++ 中的单独类访问静态映射?

java - O(1) 中的 value.contains(object) 的高效 java 映射?

dictionary - 在 golang 中使用私有(private) map 、 slice 的最佳做法是什么?

python - 在 RASA Core/NLU 中获取意图值

python - 将字典列表与数据框进行比较,显示缺失值

python - 一种使用脚本对数字进行分组的方法

python - pandas df 可以有可供选择的列数吗?