为了账号安全,请及时绑定邮箱和手机立即绑定

在 Pandas 中将数据帧转换为长格式

在 Pandas 中将数据帧转换为长格式

隔江千里 2022-05-24 09:31:17
我有一个这样的数据框:我正在尝试像这样重塑它:对于我的生活,我无法做到这一点。我认为 usingdf.pivot_table会起作用,但它对分数进行了某种平均。我已经搜索过,但找不到类似的问题。大多数重塑问题都不想扩大数据集。任何建议表示赞赏。df = [    {'id' : '1', 'score_type': 'test_01', 'score': 1},          {'id' : '1', 'score_type': 'test_02', 'score': 2},          {'id' : '1', 'score_type': 'test_03', 'score': 3},          {'id' : '1', 'score_type': 'test_04', 'score': 4},          {'id' : '2', 'score_type': 'test_01', 'score': 5},          {'id' : '2', 'score_type': 'test_02', 'score': 6},          {'id' : '2', 'score_type': 'test_03', 'score': 7},          {'id' : '2', 'score_type': 'test_04', 'score': 8}          ]df = pd.DataFrame(df)df = df[['id', 'score_type', 'score']]df
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

df.set_index(['id','score_type']).unstack(-1)



查看完整回答
反对 回复 2022-05-24
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这对你有用:


df = df.set_index(['id','score_type']).unstack(-1)

df.columns = df.columns.droplevel()


score_type  test_01  test_02  test_03  test_04

id                                            

1                 1        2        3        4

2                 5        6        7        8

让我们详细看一下这两行代码:


1. 第一行代码正确格式化了数据框,但'score'在顶部添加了一个额外的级别:


df = df.set_index(['id','score_type']).unstack(-1)


score                        

score_type test_01 test_02 test_03 test_04

id                                        

1                1       2       3       4

2                5       6       7       8

2. 第二行代码允许您删除您不感兴趣的添加级别并获得您正在寻找的结果:


df.columns = df.columns.droplevel()


score_type  test_01  test_02  test_03  test_04

id                                            

1                 1        2        3        4

2                 5        6        7        8


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号