我有一个熊猫df
设置如下:
product salesperson positionHours levelHours
0 soap john 10 25
1 nuts john 15 27
2 soap doug 12 29
3 nuts doug 11 24
4 soap tory 19 20
5 nuts tory 20 20
Run Code Online (Sandbox Code Playgroud)
我正在努力实现以下目标,我如何在熊猫中做到这一点?
product measurement john doug tory
0 soap positionHours 10 12 19
1 levelHours 25 29 20
3 nuts positionHours 15 11 20
4 levelHours 27 24 20
Run Code Online (Sandbox Code Playgroud)
将有多种方法可以做到这一点。想到的第一对:
融化,然后旋转:
(df.melt(["product", "salesperson"], var_name="measurement")
.pivot(index=["product", "measurement"], columns="salesperson", values="value")
.rename_axis(None, axis=1))
doug john tory
product measurement
nuts levelHours 24 27 20
positionHours 11 15 20
soap levelHours 29 25 20
positionHours 12 10 19
Run Code Online (Sandbox Code Playgroud)
枢轴,然后堆叠
(df.pivot(index="product", columns="salesperson", values=["positionHours", "levelHours"])
.stack(0)
.rename_axis(index=["product", "measurement"], columns=None))
doug john tory
product measurement
nuts levelHours 24 27 20
positionHours 11 15 20
soap levelHours 29 25 20
positionHours 12 10 19
Run Code Online (Sandbox Code Playgroud)
设置索引,然后执行 unstack/stack 组合
(df.set_index(["product", "salesperson"])
.rename_axis("measurement", axis=1)
.unstack(1)
.stack(0)
.rename_axis(None, axis=1))
doug john tory
product measurement
nuts levelHours 24 27 20
positionHours 11 15 20
soap levelHours 29 25 20
positionHours 12 10 19
Run Code Online (Sandbox Code Playgroud)