[英]Converting the dataframe from long to wide using Pandas
我的樣本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='')
但它沒有按照我的意願格式化數據year
的student_id
,它為另一個student_id
創建了一個具有相同列名的新列,依此類推......有人可以提供一些關於如何實現我想要的 output 的見解嗎?
你可以pivot
; 只需要 2 列作為值:
out = df.pivot('student_id', 'year', ['grade', 'school'])
out.columns = [f'{x}_{y}' for x,y in out.columns]
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.