Выберите ненулевые столбцы для каждой строки в панде DataFrame - PullRequest
1 голос
/ 24 мая 2019

У меня есть датафрейм, в котором строки - это разные случаи, а столбцы - возможные события в форме:

df_prob
index  colA colB colC ColD
  0     NaN  0.9  NaN  0.1
  1     NaN  NaN  0.3  0.7
  2       1  NaN  NaN  NaN

Мне нужно создать df, где каждый случай указан с возможными событиями для этого случая:

df_order
index case event prob
  0    0    colB  0.9
  1    0    colD  0.7
  2    1    colC  0.3
  3    1    colD  0.7
  4    2    colA   1


Дополнительная сложность заключается в том, что это очень рассеянная матрица, поэтому большинство ее значений - NAN, и я пытался найти какой-либо метод без использования циклов, поскольку это df 30000 x 30000 приблизительно.

1 Ответ

1 голос
/ 24 мая 2019

Используйте stack и затем сбросьте индекс:

(df.set_index('index')
   .stack()
   .reset_index()
   .set_axis(['case', 'event', 'prob'], axis=1, inplace=False))

   case event  prob
0     0  colB   0.9
1     0  ColD   0.1
2     1  colC   0.3
3     1  ColD   0.7
4     2  colA   1.0
...