例如,我现在将DataFrame作为
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
我想将其转换为
id scoreDict
1 {'1': 0, '2': 0.1086, ...}
2 {...}
3 {...}
无论如何要做到这一点?
提前致谢!
答案 0 :(得分:50)
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}]
答案 1 :(得分:2)
我认为以下代码会以您正在寻找的格式为您提供数据框。它还允许您选择任何列作为索引
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...
答案 2 :(得分:1)
对于像我这样的其他人,我遇到了这个问题,但希望做到以下几点: 逐行创建字典以根据相邻列的值映射列。
这是我们的映射表:
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')
df_map.transpose()
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'}
答案 3 :(得分:0)
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}}