Python 使用每行的第一个值作为键,将数据帧行转换为列表的dict 设置
我有一个数据帧:Python 使用每行的第一个值作为键,将数据帧行转换为列表的dict 设置,python,python-3.x,pandas,dataframe,dictionary,Python,Python 3.x,Pandas,Dataframe,Dictionary,我有一个数据帧: import pandas as pd 即: (使用,) 问题 我想把上面的数据帧转换成这个dict: +----+-----+-----+-----+-----+ | | A | B | C | D | |----+-----+-----+-----+-----| | 0 | A0 | B0 | C0 | D0 | | 1 | A1 | B1 | C1 | D1 | | 2 | A2 | B2 | C2 | D2 | |
import pandas as pd
即:
(使用,)
问题 我想把上面的数据帧转换成这个dict:
+----+-----+-----+-----+-----+
| | A | B | C | D |
|----+-----+-----+-----+-----|
| 0 | A0 | B0 | C0 | D0 |
| 1 | A1 | B1 | C1 | D1 |
| 2 | A2 | B2 | C2 | D2 |
| 3 | A3 | B3 | C3 | D3 |
+----+-----+-----+-----+-----+
每行的第一个元素是键,数据帧的行是dict as list的值
解决 A 使用
.iterrows()
,其中:
B
使用.groupby()
:
它们都能产生所需的输出
问题: 有没有更有效的方法来实现上述目标?
如果有一种方法可以用于循环,即,那就太好了。使用
设置索引
,然后agg
使用axis=1上的列表
并使用系列。要记录
:
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()}
结果:
dct = df.set_index(df['A']).agg(list, axis=1).to_dict()
像这样的东西,我想这会比agg
~
{'A0': ['A0', 'B0', 'C0', 'D0'],
'A1': ['A1', 'B1', 'C1', 'D1'],
'A2': ['A2', 'B2', 'C2', 'D2'],
'A3': ['A3', 'B3', 'C3', 'D3']}
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()}
dct = df.set_index(df['A']).agg(list, axis=1).to_dict()
{'A0': ['A0', 'B0', 'C0', 'D0'],
'A1': ['A1', 'B1', 'C1', 'D1'],
'A2': ['A2', 'B2', 'C2', 'D2'],
'A3': ['A3', 'B3', 'C3', 'D3']}
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']}