这个问题很像是Pandas pivot or reshape dataframe with NaN的后续问题
解码视频时,一些帧丢失,需要对数据进行插值
当前df
frame pvol vvol area label
0 NaN 109.8 120 v
2 NaN 160.4 140 v
0 23.1 NaN 110 p
1 24.3 NaN 110 p
2 25.6 NaN 112 p
预期的df
frame pvol vvol p_area v_area
0 23.1 109.8 110 110
1 24.3 135.1 110 111 # Interpolated for label v
2 25.6 160.4 112 120
我知道,只要对p帧进行current_df
整形,我就可以进行df.interpolate()
。重塑是问题所在。
注意:label p >= label v
表示标签p
将始终包含所有帧,但v
可能会丢失帧
发布于 2020-11-21 06:04:02
您可以像上一个问题中那样重塑dropna,只是现在需要指定只删除空列,然后进行插值:
out = (df.pivot(index='frame', columns='label')
.dropna(axis=1, how='all') # only drop empty columns
.interpolate() # interpolate
)
out.columns = [f'{y}_{x}' for x,y in out.columns]
输出:
p_pvol v_vvol p_area v_area
frame
0 23.1 109.8 110.0 120.0
1 24.3 135.1 110.0 130.0
2 25.6 160.4 112.0 140.0
发布于 2020-11-21 06:04:45
更改dropna
删除问题
s = df.set_index(['frame','label']).unstack().dropna(thresh=1,axis=1)
s.columns = s.columns.map('_'.join)
s = s.interpolate()
Out[279]:
pvol_p vvol_v area_p area_v
frame
0 23.1 109.8 110.0 120.0
1 24.3 135.1 110.0 130.0
2 25.6 160.4 112.0 140.0
https://stackoverflow.com/questions/64937425
复制相似问题