Pandas:如果第三列的字符串值,则根据另一列的值创建列



我的数据框架是这样的:

position        labels
[58.0, 71.0]    ind    
[137.0, 147.0]  pro         
[170.0, 191.0]  pro          
[nan, nan]      NaN               
[nan, nan]      NaN               
[36.0, 57.0]    pro        
[67.0, 73.0]    ind     
[86.0, 93.0]    tar          
[0.0, 8.0]      ind     

需要的输出是:

ind.position   pro.position   tar.position   
[58.0, 71.0]            
[137.0, 147.0]       
[170.0, 191.0]           
[36.0, 57.0]        
[67.0, 73.0]  
[86.0, 93.0]               
[0.0, 8.0]              

因此,基于labels列,创建3个新列,以标签值为后缀,以.position为结尾,并使用基于标签的相应位置作为值。

有聪明的方法吗?

使用DataFrame.dropna删除缺失值的原始列,然后将索引转换为列,因此可能使用DataFrame.pivot,最后添加DataFrame.add_suffix:

df = (df.dropna(subset=['labels'])
.reset_index()
.pivot('index','labels','position')
.add_suffix('.position'))
print (df)
labels ind.position   pro.position tar.position
index                                          
0       [58.0,71.0]            NaN          NaN
1               NaN  [137.0,147.0]          NaN
2               NaN  [170.0,191.0]          NaN
5               NaN    [36.0,57.0]          NaN
6       [67.0,73.0]            NaN          NaN
7               NaN            NaN  [86.0,93.0]
8         [0.0,8.0]            NaN          NaN

最新更新