Python 如何从pandas数据框制作字典?

Python 如何从pandas数据框制作字典?,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,假设我有一个包含两列的数据框: col1 fre a,d 2 b,d 4 a,h 1 k,l 5 b,c 3 a,f 7 我可以制作一本字典,其中键是col1的第一个元素吗。值是col1和fre的第二个元素的每一对 例如: {'key': 'a', ['Results': {'d': 2}, {'h': 1},{'f': 7 } ]} , {`key`: 'b', ['Results' : {'d' : 4},{'c' :3} ]}, {`ke

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

col1  fre    
a,d    2
b,d    4
a,h    1
k,l    5
b,c    3
a,f    7
我可以制作一本字典,其中键是col1的第一个元素吗。值是col1和fre的第二个元素的每一对

例如:

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

如果可以使用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]}

如果可以使用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]}

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

您得到了包含两列的数据帧,只需在其上调用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}的字典。如果您在启动数据帧时遇到问题,请检查pandas.DataFrame上的。是的,您可以!Pandas具有Pandas.DataFrame.to_dict方法-有关文档,请单击

您得到了包含两列的数据帧,只需在其上调用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}的字典。如果您在启动数据帧时遇到问题,请检查pandas.DataFrame上的。

您可以先使用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()]})

您可以先使用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()]})

预期的输出不是有效的python。@Ch3steR任何类似的输出都是OK的,所以您需要一个dict列表,对吗?@VinayG yes任何我可以访问的内容information@elham如果其中一个答案帮助你解决问题,请考虑通过点击复选来接受它。请注意,显然没有义务这样做。预期的输出不是有效的python。@Ch3steR任何类似的内容都可以,所以您需要一个dict列表,对吗?@VinayG是的任何我可以访问的内容information@elham如果其中一个答案帮助您解决了问题,请考虑通过点击复选来接受它。请注意,显然没有义务这样做。根据标签和问题描述,OP宁愿使用熊猫。在我看来,这仍然是一个不错的选择!:-我同意,你的解决方案更优雅。但是我想你需要先拆分第一列,这样它才能在指定的数据帧格式上工作。完全同意你的观点,尽管假设我有一个包含两列的数据帧,我认为他已经实现了一个工作数据帧。根据标签和问题描述,OP更希望使用熊猫。在我看来,这仍然是一个不错的选择!:-我同意,你的解决方案更优雅。但是我想你需要先拆分第一列,这样它才能在指定的数据帧格式上工作。完全同意你的观点,尽管假设我有一个包含两列的数据帧,我认为他已经实现了一个工作的数据帧。