Python Dataframe:转置 Dataframe 中的 4/5 列并保留日期列而不转置

问题描述 投票:0回答:1

我有一个示例输入数据框:

姓名 日期 分数 目标 差异
吉姆 2023-10-09 9 12 3
吉姆 2023-10-16 13 16 3
安迪 2023-10-09 7 7 0
安迪 2023-10-16 5 20 15

创建表的Python代码:

import pandas as pd
df = pd.DataFrame({'Name':["Jim","Jim","Andy", "Andy"], 'Date':['2023-10-09', '2023-10-16', '2023-10-09', "2023-10-16"], 'Score':["9","13","7", "5"], 'Target':["12","16","7", "20"], 'Difference':["3","3","0", "15"]})

我想按名称转置上表,并将行设为日期、分数、目标和差异。所需的输出表如下:

日期 类别 吉姆 安迪
2023-10-09 分数 9 7
目标 12 7
差异 3 0
2023-10-16 分数 13 5
目标 16 20
差异 3 15

我尝试使用下面的代码执行此操作,但它不会生成所需的按日期和类别列分组的转置表。

df_2 =df.T 

df_2 产生以下输出,该输出正在转置我不想要的“日期”列。

python group-by multiple-columns transpose
1个回答
0
投票

您可以先将

"Score", "Target", "Difference"
列融化为两个键值列,然后应用
pivot

df \
    .melt(
        id_vars=["Name", "Date"],
        value_vars=["Score", "Target", "Difference"],
        var_name="Category"
    ) \
    .pivot(
        index=["Date", "Category"],
        values="value",
        columns="Name"
    )

输出:

Name                  Andy Jim
Date       Category           
2023-10-09 Difference    0   3
           Score         7   9
           Target        7  12
2023-10-16 Difference   15   3
           Score         5  13
           Target       20  16
© www.soinside.com 2019 - 2024. All rights reserved.