#python #pandas
#python #панды
Вопрос:
У меня есть df
настройка pandas следующим образом:
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
И я пытаюсь добиться следующего, как я могу это сделать в pandas?
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
Ответ №1:
Будет множество способов, которыми вы можете это сделать. Первая пара, которая приходит на ум:
Расплавить, затем повернуть:
(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
свод, затем стек
(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
установите индекс, затем выполните комбинацию 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