Asi*_*bal 7 python dataframe pandas
我有一个数据框:
Name Sub_Marks
0 Tom {'Maths': 30, 'English': 40, 'Science': 35}
1 Harry {'Maths': 35, 'English': 30, 'Science': 25}
2 Nick {'Maths': 32, 'English': 23, 'Science': 20}
Run Code Online (Sandbox Code Playgroud)
我需要将字典分解为多行。例如
Name Subject Marks
0 Tom Maths 30
1 Tom English 40
2 Tom Science 35
3 Harry Maths 35
4 Harry English 30
5 Harry Science 25
6 Nick Maths 32
7 Nick English 23
8 Nick Science 20
Run Code Online (Sandbox Code Playgroud)
我知道我们可以在数据框中分解列表。有什么办法可以用字典来做吗?
Shu*_*rma 13
我们可以创建 的元组列表Name,Marks并Subjects通过迭代列表理解中的数据帧的值,然后我们可以从这个元组列表创建一个新的数据帧
out = pd.DataFrame([(n, k, v) for (n, d) in df.values for k, v in d.items()])
out.columns = ['Name', 'Subject', 'Marks']
Run Code Online (Sandbox Code Playgroud)
基于替代的pandas方法
m = pd.DataFrame([*df['Sub_Marks']], df.index).stack()\
.rename_axis([None,'Subject']).reset_index(1, name='Marks')
out = df[['Name']].join(m)
Run Code Online (Sandbox Code Playgroud)
>>> out
Name Subject Marks
0 Tom Maths 30
1 Tom English 40
2 Tom Science 35
3 Harry Maths 35
4 Harry English 30
5 Harry Science 25
6 Nick Maths 32
7 Nick English 23
8 Nick Science 20
Run Code Online (Sandbox Code Playgroud)