我有一个四列的数据框架。我想把这个DataFrame转换成一个python字典。我希望第一列的元素是键,而同一行中其他列的元素是值。

DataFrame:

    ID   A   B   C
0   p    1   3   2
1   q    4   3   2
2   r    4   0   9  

输出应该是这样的:

字典:

{'p': [1,3,2], 'q': [4,3,2], 'r': [4,0,9]}

当前回答

尝试使用Zip

df = pd.read_csv("file")
d= dict([(i,[a,b,c ]) for i, a,b,c in zip(df.ID, df.A,df.B,df.C)])
print d

输出:

{'p': [1, 3, 2], 'q': [4, 3, 2], 'r': [4, 0, 9]}

其他回答

df = pd.DataFrame([['p',1,3,2], ['q',4,3,2], ['r',4,0,9]], columns=['ID','A','B','C'])
my_dict = {k:list(v) for k,v in zip(df['ID'], df.drop(columns='ID').values)}
print(my_dict)

与输出

{'p': [1, 3, 2], 'q': [4, 3, 2], 'r': [4, 0, 9]}

尝试使用Zip

df = pd.read_csv("file")
d= dict([(i,[a,b,c ]) for i, a,b,c in zip(df.ID, df.A,df.B,df.C)])
print d

输出:

{'p': [1, 3, 2], 'q': [4, 3, 2], 'r': [4, 0, 9]}

大多数答案都不能处理ID在数据框架中可能存在多次的情况。如果ID可以在Dataframe df中复制,你想使用一个列表来存储值(也就是列表的列表),按ID分组:

{k: [g['A'].tolist(), g['B'].tolist(), g['C'].tolist()] for k,g in df.groupby('ID')}

一本字典应该是:

{'red': '0.500', 'yellow': '0.250', 'blue': '0.125'}

被要求出一个数据框架,像这样:

        a      b
0     red  0.500
1  yellow  0.250
2    blue  0.125

最简单的方法是:

dict(df.values)

工作代码片段如下:

import pandas as pd
df = pd.DataFrame({'a': ['red', 'yellow', 'blue'], 'b': [0.5, 0.25, 0.125]})
dict(df.values)

也可以使用字典理解和iterrows()方法来获得所需的输出。

result = {row.ID: [row.A, row.B, row.C] for (index, row) in df.iterrows()}