Select pandas DataFrame 中每一行的非空列
Select non-null columns for each row in a pandas DataFrame
我有一个数据框,其中行是不同的情况,列是可能的事件,形式为:
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。
使用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
我有一个数据框,其中行是不同的情况,列是可能的事件,形式为:
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。
使用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