我有一个示例输入数据框:
姓名 | 日期 | 分数 | 目标 | 差异 |
---|---|---|---|---|
吉姆 | 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 产生以下输出,该输出正在转置我不想要的“日期”列。
您可以先将
"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