使用 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=''),但它没有按照我的意愿格式化数据
  • 例如:对于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用dplyr操纵长表数据进行关联,但不将数据转换为宽格式

使用Pandas转换为长面板数据格式

使用频率列将宽转换为长

python-将pandas数据帧转换为json或dict,然后使用非唯一列返回到df

将长数据帧转换为宽数据帧

使用R行中存储的密钥将数据帧从宽格式转换为长格式

使用R中的重复标识符将数据帧从长转换为宽

在长格式数据框中使用不带列名的熔化将宽格式转换为长格式

使用R中多个“关键”列中的值将数据帧从长格式复杂转换为宽格式

使用Pandas将两个不同的数据帧转换为一个json文件

将宽数据帧转换为长数据帧

使用列名将Python Pandas中的日期转换为长数据

如何在Pandas中将宽日期数据转换为长格式

使用2个变量将数据帧从宽转换为长

使用Rpy2将Pandas DataFrame转换为R数据帧

使用melt()将宽数据转换为需要值查找的长数据格式

将缺少条目的Pandas df从长格式转换为宽格式

当每组有多个值时,将 Pandas 数据框列从长转换为宽

使用 dplyr 将数据帧从宽转换为长

将 spark 转换为 pandas 数据帧有异常:使用基于文件的收集时不支持箭头

使用 Pandas 将 dict 数据转换为数据框

使用 Pandas 在 Python 中将 JSON 结构转换为数据帧

将输出转换为 Pandas 数据帧

使用 R 将多列数据帧转换为长 3 列数据帧

使用 Struct 和 Array 结构将 Pandas 数据帧转换为 JSON 以上传到 BigQuery

使用 SQL 将宽格式数据转换为长格式

R - 使用多个值列将数据帧从长格式转换为宽格式

使用 R 中的计数和百分比将长数据转换为宽数据

使用 reshape () 和 pivot_long() 将宽数据转换为长数据时出错