Есть ли способ объединить несколько строк Панд в одну строку с дополнительными столбцами?

#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)