Pandas dataframe: преобразовывать столбцы в строки одного столбца - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть фрейм данных, который выглядит как

userId  feature1  feature2  feature3  ...
123456  0         0.45      0         ...
234567  0         0         0         ...
345678  0.6       0         0.2       ...
.
.

Функции в основном нули, но иногда некоторые из них имеют ненулевые значения.Одна строка для идентификатора пользователя может иметь ноль, одну или несколько ненулевых функций.

Я хочу преобразовать это в следующий набор данных:

userId  feature  value
123456  feature2 0.45
345678  feature1 0.6
345678  feature3 0.2

По сути, мы сохраняем только функциикоторые ненулевые для каждого userId.Итак, для userId 345678 у нас есть 2 строки в преобразованном наборе данных, одна для feature1, а другая для feature3.userId 234567 отброшен, так как ни одна из функций не является ненулевой.Если да, то как?

Любые другие решения для панд-микрофонов?

1 Ответ

0 голосов
/ 20 февраля 2019

Магия от melt

df.melt('userId').query('value!=0')
Out[459]: 
   userId  variable  value
2  345678  feature1   0.60
3  123456  feature2   0.45
8  345678  feature3   0.20

Обратите внимание: stack вам нужна маска от 0 до NaN

df.mask(df.eq(0)).set_index('userId').stack().reset_index()
Out[460]: 
   userId   level_1     0
0  123456  feature2  0.45
1  345678  feature1  0.60
2  345678  feature3  0.20
...