Reputation: 1625
For example, I have DataFrame now as
id score1 score2 score3 score4 score5
1 0.000000 0.108659 0.000000 0.078597 1
2 0.053238 0.308253 0.286353 0.446433 1
3 0.000000 0.083979 0.808983 0.233052 1
I want to convert it as
id scoreDict
1 {'1': 0, '2': 0.1086, ...}
2 {...}
3 {...}
Anyway to do that?
Upvotes: 124
Views: 185779
Reputation: 468
For others like me coming to this question but looking to do the following: Create a dict row by row to map a column based of the value of the adjacent column.
Here's our mapping table:
Rating y
0 AAA 19
1 AA1 18
2 AA2 17
3 AA3 16
4 A1 15
5 A2 14
6 A3 13
...
19 D 0
IN:
import pandas as pd
df_map.set_index('y')
dict_y = df_map['Rating'].to_dict()
OUT:
{19: 'AAA',
18: 'AA1',
17: 'AA2',
16: 'AA3',
15: 'A1',
14: 'A2',
13: 'A3',
12: 'BBB1',
11: 'BBB2',
10: 'BBB3',
9: 'BB1',
8: 'BB2',
7: 'BB3',
6: 'B1',
5: 'B2',
4: 'B3',
3: 'CCC1',
2: 'CCC2',
1: 'D'}
Upvotes: 16
Reputation: 121
df = pd.DataFrame({'col1': [1, 2],
'col2': [0.5, 0.75]},
index=['row1', 'row2'])
df
col1 col2
row1 1 0.50
row2 2 0.75
df.to_dict(orient='index')
{'row1': {'col1': 1, 'col2': 0.5}, 'row2': {'col1': 2, 'col2': 0.75}}
Upvotes: 12
Reputation: 691
I think the below code will give you the data frame in the format you are looking for. Also it allows you to choose any column as an index
import pandas as pd
#IMPORT YOUR DATA
#Any other way to import data can also be used. I saved it in .csv file
df=pd.read_csv('dftestid.csv')
print("INITIAL DATAFRAME")
print(df)
print()
#Convert Data Frame to Dictionary (set_index method allows any column to be used as index)
df2dict=df.set_index('id').transpose().to_dict(orient='dict')
#Convert Dictionary to List with 'score' replaced
dicttolist=[[k,{int(k1.replace('score','')):v1 for k1,v1 in v.items()}] for k,v in df2dict.items()]
#"Create the new DataFrame"
df2=pd.DataFrame(dicttolist,columns=['id', 'scoreDict'])
print("NEW DATAFRAME")
print(df2)
OUT:
INITIAL DATAFRAME
id score1 score2 score3 score4 score5
0 1 0.000000 0.108659 0.000000 0.078597 1
1 2 0.053238 0.308253 0.286353 0.446433 1
2 3 0.000000 0.083979 0.808983 0.233052 1
NEW DATAFRAME
id scoreDict
0 1 {1: 0.0, 2: 0.108659, 3: 0.0, 4: 0.078597, 5: ...
1 2 {1: 0.053238, 2: 0.308253, 3: 0.286353, 4: 0.4...
2 3 {1: 0.0, 2: 0.083979, 3: 0.808983, 4: 0.233052...
Upvotes: 4
Reputation: 24752
import pandas as pd
# your df
# =========================
print(df)
id score1 score2 score3 score4 score5
0 1 0.0000 0.1087 0.0000 0.0786 1
1 2 0.0532 0.3083 0.2864 0.4464 1
2 3 0.0000 0.0840 0.8090 0.2331 1
# to_dict
# =========================
df.to_dict(orient='records')
Out[318]:
[{'id': 1.0,
'score1': 0.0,
'score2': 0.10865899999999999,
'score3': 0.0,
'score4': 0.078597,
'score5': 1.0},
{'id': 2.0,
'score1': 0.053238000000000001,
'score2': 0.308253,
'score3': 0.28635300000000002,
'score4': 0.44643299999999997,
'score5': 1.0},
{'id': 3.0,
'score1': 0.0,
'score2': 0.083978999999999998,
'score3': 0.80898300000000001,
'score4': 0.23305200000000001,
'score5': 1.0}]
Upvotes: 242