为pandas DataFrame中的每一行选择非空列

时间:2019-05-24 03:57:20

标签: python pandas dataframe nan

我有一个数据框,其中行是不同的情况,列是可能的事件,格式为:

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 个答案:

答案 0 :(得分:1)

使用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