如何从熊猫数据框制作字典?

时间:2021-01-23 15:11:16

标签: python pandas dataframe dictionary

假设我有一个包含 2 列的数据框:

col1  fre    
a,d    2
b,d    4
a,h    1
k,l    5
b,c    3
a,f    7

我可以制作一个字典,其中 keycol1 的第一个元素。而 valuecol1fre 的第二个元素的每一对。?

例如:

{'key': 'a',
  ['Results': {'d': 2}, {'h': 1},{'f': 7 } ]} , {`key`: 'b', ['Results' : {'d' : 4},{'c' :3} ]}, {`key`: 'k', ['Results' : {'l' : 5} ]}

3 个答案:

答案 0 :(得分:3)

您可以先使用 apply 函数创建一个新列,然后使用该列对数据进行分组和格式化

df['gkey'] = df.apply(lambda row: row['col1'].split(',')[0], axis=1)
l = []
for key, value in df.groupby('gkey'):
    l.append({'key': key, 'Results': [{row['col1'].split(',')[1]: row['fre']}for index, row in value.iterrows()]})

答案 1 :(得分:1)

如果你可以使用 numpy,你可以先创建一个外部字典,以所有 col1 first 值作为键。 set 操作负责处理这些值的多次出现。 然后,您可以遍历 dict 中的所有键并生成新键。

mydict = {okey: {} for okey in set([col1[0] for col1 in df['col1'].tolist()])}
for okey in mydict.keys():
    msk = np.where([m.startswith(okey) for m in df['col1'].tolist()])[0]
    mydict[okey] = {row[0][-1]: row[1] for row in np.array(df)[msk]}

答案 2 :(得分:1)

是的,你可以! Pandas 有 pandas.DataFrame.to_dict 方法 - 有关文档,请单击 here

您获得了包含两列的数据框,只需在其上调用 df.to_dict(),就像在代码示例中一样:

df = pd.DataFrame({'col1': [1, 2],
                   'col2': [0.5, 0.75]},
                  index=['row1', 'row2'])

df.to_dict()

df 变量现在包含一个字典,语法为:{'col1': {'row1': 1, 'row2': 2}, 'col2': {'row1': 0.5, 'row2': 0.75}}。如果您在启动 DataFrame 时遇到问题,请检查 pandas.DataFrame 上的 documentation