如何将数据框中的列合并到多索引数据框标头.
即,如何合并各个主题值并创建新的数据帧
import pandas as pd
import numpy as np
df = pd.DataFrame({'Maths':[95,96,97,98] ,'Science': [91,92,93,94]})
df1 = pd.DataFrame({'Social':[85,86,87,88] ,'English': [81,82,83,84]})
print df
Maths Science
0 95 91
1 96 92
2 97 93
3 98 94
print df1
English Social
0 81 85
1 82 86
2 83 87
3 84 88
解决方法:
使用带参数键的concat
:
df = pd.concat([df, df1], axis=1, keys=('Semester1','Semester2'))
print (df)
Semester1 Semester2
Maths Science Social English
0 95 91 85 81
1 96 92 86 82
2 97 93 87 83
3 98 94 88 84
print (df.columns)
MultiIndex(levels=[['Semester1', 'Semester2'], ['English', 'Maths', 'Science', 'Social']],
labels=[[0, 0, 1, 1], [1, 2, 3, 0]])
编辑:对于新列使用assign
:
df = df.assign(avg=df.mean(axis=1), perc=df.sum(axis=1) / df.values.sum())
df1 = df.assign(avg=df1.mean(axis=1),perc=df1.sum(axis=1) / df1.values.sum())
df = pd.concat([df, df1], axis=1, keys=('Semester1','Semester2'))
print (df)
Semester1 Semester2
Maths Science avg perc Maths Science avg perc
0 95 91 93.0 0.246032 95 91 83.0 0.245562
1 96 92 94.0 0.248677 96 92 84.0 0.248521
2 97 93 95.0 0.251323 97 93 85.0 0.251479
3 98 94 96.0 0.253968 98 94 86.0 0.254438
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。