Измените форму фрейма данных pandas, используя список уникальных значений

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

У меня есть фрейм данных с 12 строками и 3 столбцами. Каждое значение в столбце ‘name’ может быть связано со многими значениями в столбце ‘target’. Для каждого значения также существует связанный ‘val’, который является числовой переменной. Пример:

 name  val target
a     6.3    la
b     3.5    le
c     10     li
d     8      lo
e     2.3    lu
f     5.6    lao
g     4.7    laoo
h     4.7    laooo
a     4.8    lo
j     1.2    le
b     1.5    re
k     9.8    la
  

Я хочу изменить форму моего фрейма данных, используя уникальные значения из столбцов ‘targets’ в качестве новых столбцов и добавить к каждой строке соответствующий ‘val’. Поскольку для каждого целевого объекта существует разное количество значений ‘val’, новый фрейм данных должен заполнять пустые строки нулями. Например:

 la     le     li     lo     lu    ...
6.3    3.5    10     8      2.3   ...
9.8    1.2     0     4.8    0     ...
  

Я нашел скрипт, который делает это, но было довольно сложно понять, что он делает. Возможно ли это сделать, используя всего несколько строк, используя numpy и / или pandas?

Ответ №1:

 x = pd.DataFrame.from_dict(
    df.groupby('target')['val'].apply(np.unique).to_dict(), 'index').T.fillna(0)

print(x)
  

Вывод:

     la  lao  laoo  laooo   le    li   lo   lu   re
0  6.3  5.6   4.7    4.7  1.2  10.0  4.8  2.3  1.5
1  9.8  0.0   0.0    0.0  3.5   0.0  8.0  0.0  0.0