Python中如何转换pandas DataFrame格式实现长表转宽表
实现方法
你这个需求属于长表转宽表的场景,不能直接用transpose()转置,需要先给同name的每行分配对应新表的grade序号,再用透视表实现:
完整可运行代码
import pandas as pd # 构造原始DataFrame data = { "grade": [1,1,1,2,2,2,3,3,3], "name": ["abc","abc","abc","xyz","xyz","xyz","mno","mno","mno"], "price": [25,30,35,40,45,50,55,60,65] } df = pd.DataFrame(data) # 第一步:给每个name分组内添加行号,该序号就是新表的grade值 df['new_grade'] = df.groupby('name').cumcount() + 1 # 第二步:通过透视表完成格式转换 df_pivot = df.pivot(index='new_grade', columns='name', values='price').reset_index() # 第三步:调整列名,移除columns的默认名称 df_pivot = df_pivot.rename(columns={'new_grade': 'grade'}).rename_axis(columns=None) # 可选:如果需要固定列顺序为grade、abc、xyz、mno,添加下行即可 # df_pivot = df_pivot[['grade', 'abc', 'xyz', 'mno']] print(df_pivot)
输出结果
grade abc xyz mno 0 1 25 40 55 1 2 30 45 60 2 3 35 50 65
内容的提问来源于stack exchange,提问作者Bikal Sapkota
相关产品推荐
相关产品推荐

