python中多列的长到宽格式

时间:2016-04-17 00:57:32

标签: python python-2.7 pandas

我正在学生考试数据集如下,

userid      grade   examid  subject     numberofcorrectanswers  numberofwronganswers
4           5       8       Synonyms            NULL                    NULL
4           5       8       Sentence            NULL                    NULL
4           5       8       Whole Numbers       6                       15
4           5       8       Decimals            4                       10
5           5       9       Synonyms            NULL                    NULL
5           5       9       Sentence            NULL                    NULL
5           5       9       Whole Numbers       5                       12
5           5       9       Decimals            3                       1

我想将这种长格式转换为宽格式,我可以将数据转换为

userid      grade   examid      Synonyms_numberofcorrectanswers         Synonyms_numberofwronganswers       Sentence_numberofcorrectanswers         Sentence_numberofwronganswers       Whole_numbers_numberofcorrectanswers        Whole_numbers_numberofwronganswers              Decimals_numberofcorrectanswers         Decimals_numberofwronganswers
4           5           8               NULL                                    NULL                                NULL                                    NULL                                6                                           15                                          4                                           10
5           5           9               NULL                                    NULL                                NULL                                    NULL                                5                                           12                                          3                                            1

以下是我的尝试,

data_subset.set_index(['userid', 'grade','examid','subject']).unstack('subject').reset_index()

但这不是单个平面数据帧。里面有几个层次结构。任何人都可以帮我制作一个扁平的数据帧吗?

由于

2 个答案:

答案 0 :(得分:1)

这样的东西?

var data = {
    songTitle: 'Blah Blah',
    songTime: '1:30'
}

Songs.update({
    _id: songId,
    createdBy: currentUser,
},
{
    $set: {data}
 });

答案 1 :(得分:1)

我会扩展亚历山大的答案。说我们有

writeFile

我们将两级列索引的名称作为带有df2 = df.groupby(['userid', 'grade','examid','subject']).sum().unstack('subject') 的2元组列表。将它展平并组合名称:

df2.columns.get_values()

如果需要:

  • 对列进行排序:例如new_col_names = ['_'.join((b,a)) for a,b in df2.columns.get_values()] df2.columns = new_col_names

  • df2.reindex(columns = sorted(df2.columns))等设置为列而不是多索引:userid