#python #pandas
Вопрос:
Я ищу эффективный способ агрегирования фрейма данных Pandas на основе значения столбца, в котором столбцы расширяются и именуются на основе значения в другом столбце. Это лучше всего объяснить на примере:
Это мой входной фрейм данных:
customer device x y z
0 Jack M 1 2 3
1 Jack D 4 5 6
2 Jane M 7 8 9
3 Jane D 10 11 12
И это тот результат, который я хочу:
customer x_M y_M z_M x_D y_D z_D
0 Jack 1 2 3 4 5 6
1 Jane 7 8 9 10 11 12
Как вы можете видеть, «агрегация», возможно, является вводящим в заблуждение словом. Скорее, строки «расширяются» в столбцы, которые называются на основе другого столбца из их соответствующих строк.
На мой взгляд, мне придется сделать какой — то цикл, но я надеялся на более эффективную работу Pandas, чем можно сделать то же самое. Спасибо.
Ответ №1:
Просто pivot
фрейм данных, затем соедините столбцы на двух уровнях с помощью _
:
>>> out=df.pivot('customer', 'device', ['x', 'y', 'z'])
>>> out.columns=['_'.join(c) for c in out]
выход:
x_D x_M y_D y_M z_D z_M
customer
Jack 4 1 5 2 6 3
Jane 10 7 11 8 12 9
Комментарии:
1. Откажитесь от моего предыдущего комментария — это отлично работает. Спасибо
2. Следуя вашему коду, мы также можем сбросить индекс, чтобы получить точный формат, который был запрошен: out.reset_index(inplace=True)