python - Pandas 数据帧行到列表字典,使用每行的第一个值作为键

标签 python python-3.x pandas dataframe dictionary

import pandas as pd

设置
我有一个数据框:
df = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   'C': ['C0', 'C1', 'C2', 'C3'],
                   'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])
IE:
+----+-----+-----+-----+-----+
|    | A   | B   | C   | D   |
|----+-----+-----+-----+-----|
|  0 | A0  | B0  | C0  | D0  |
|  1 | A1  | B1  | C1  | D1  |
|  2 | A2  | B2  | C2  | D2  |
|  3 | A3  | B3  | C3  | D3  |
+----+-----+-----+-----+-----+
(使用 print(tabulate(df, headers='keys', tablefmt='psql')) related Q )

问题
我想将上面的数据框转换成这个字典:
{'A0': ['A0', 'B0', 'C0', 'D0'],
 'A1': ['A1', 'B1', 'C1', 'D1'],
 'A2': ['A2', 'B2', 'C2', 'D2'],
 'A3': ['A3', 'B3', 'C3', 'D3']}
每行的第一个元素是键,数据帧的行是作为列表的字典的值。

解决方案
A
使用 .iterrows() , 其中 seems bad practice :
`{row[1][0]: list(row[1]) for row in df.iterrows() for alias in row[1]}`

使用 .groupby() (and this) :
gbdict=df.groupby('A').apply(lambda row: row.to_dict(orient='row')).to_dict()
{key: list(gbdict[key][0].values()) for key in gbdict.keys()}
它们都产生所需的输出。


有没有更有效的方法来实现上述目标?
如果有办法without for 循环,即 dict comprehension , 那简直太好了。

最佳答案

像这样的东西,我认为这会比 agg 快~

yourdict = dict(zip(df.A,df.values.tolist()))
Out[123]: 
{'A0': ['A0', 'B0', 'C0', 'D0'],
 'A1': ['A1', 'B1', 'C1', 'D1'],
 'A2': ['A2', 'B2', 'C2', 'D2'],
 'A3': ['A3', 'B3', 'C3', 'D3']}

关于python - Pandas 数据帧行到列表字典,使用每行的第一个值作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63548321/

相关文章:

python - 从 Eclipse 运行 django 服务器时没有这样的表错误

Python 3 html模块导入错误?

python - 制作 Pandas 系列的真正深度副本

python - 从数据框中获取字典的有效方法

python - 如何在循环已经运行时继续执行代码

python - 如何在Python中使用pandas访问导入的csv文件中的元素?

python - 使用 Python 将 .csv 文件分成 block

python - 绘制 MNIST 样本

python - Django MySQL 数据库传递数据库查询时出错

python - 分散 DataFrame 的快速插值