在Python中将非零列名转换为行

Ole*_*sii 4 python dataframe pandas

对于每个ID,将非零列名称记为行时,需要将稀疏数据帧转换为形状。

我已经尝试过使用带有循环的for循环-但速度非常慢,无法使用。也许有人有更好的主意?

例如,初始df:

df=pd.DataFrame({'Id':['id1','id2','id3'], 'a':[0,1,1] ,'b':[1,0,1], 'c':[1,1,0]})

Id  a b c
id1 0 1 1 
id2 1 0 1 
id3 1 1 0 
Run Code Online (Sandbox Code Playgroud)

预期:

Id   columns
id1    b 
id1    c 
id2    a 
id2    c 
id3    a 
id3    b
Run Code Online (Sandbox Code Playgroud)

ank*_*_91 5

使用熊猫.25.0,这是使用.dotand 的方法explode

m=df.set_index('Id')
m.dot(m.columns+',').str[:-1].str.split(',').explode().reset_index(name='Columns')
Run Code Online (Sandbox Code Playgroud)
   Id Columns
0   0       b
1   0       c
2   1       a
3   1       c
4   2       a
5   2       b
Run Code Online (Sandbox Code Playgroud)

  • 确实!Series.explode出现在0.25中!谢谢,anky_91!很好的解决方案! (2认同)