我的样本df
看起来像这样
student_id, year, grade, school
1001 20002001 1 abc
1001 20012002 2 abc
1001 20022003 3 abc
1001 20032004 4 abc
1002 19992000 2 abc
1002 20002001 3 abc
1002 20012002 4 abc
1003 20022003 4 abc
1004 20022003 3 abc
1004 20032004 4 abc
这df
是目前的long
格式。我想要做的是将数据转换成一种wide
格式,应该是这样的:
student_id, grade_19992000, grade_20002001, grade_20012002, grade_20022003, grade_20032004, school_19992000, school_19992000, school_20012002, school_20022003, school_20032004
1001 NaN 1 2 3 4 NaN abc abc abc abc
1002 2 3 4 NaN NaN abc abc abc NaN NaN
1003 NaN NaN NaN 4 NaN NaN NaN NaN abc NaN
1004 NaN NaN NaN 3 4 NaN NaN abc abc NaN
这既不重复也不与其他问题相关。我尝试了所有可用的选项。
我做了什么?
df.pivot(index='', columns'', values='')
,但它没有按照我的意愿格式化数据student_id
相同的,它为另一个year
创建一个具有相同列名student_id
的新列,依此类推......有人可以提供一些关于如何实现我想要的输出的见解吗?
你可以pivot
; 只有你需要 2 列作为值:
out = df.pivot('student_id', 'year', ['grade', 'school'])
out.columns = [f'{x}_{y}' for x,y in out.columns]
输出:
grade_19992000 grade_20002001 grade_20012002 grade_20022003 \
student_id
1001 NaN 1 2 3
1002 2 3 4 NaN
1003 NaN NaN NaN 4
1004 NaN NaN NaN 3
grade_20032004 school_19992000 school_20002001 school_20012002 \
student_id
1001 4 NaN abc abc
1002 NaN abc abc abc
1003 NaN NaN NaN NaN
1004 4 NaN NaN NaN
school_20022003 school_20032004
student_id
1001 abc abc
1002 NaN NaN
1003 abc NaN
1004 abc abc
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句