我的数据框架是这样的:
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