我正在尝试进行一些有一些奇怪要求的数据操作:
Index ht1 w1 ht2 w2 ht3 w3 top width
------- ----- ---- ----- ---- ----- ---- -----------
0 9 5 5
1 7 2 3
2 3 4 4
3 4 3 5 6 6
4 6 8 2 1 3 5 5
我有成对列格式的数据,即。高度和宽度。有三对高度和宽度列。如果高度列中有值,则最后一列仅选取行中的最后一个宽度值。另外,如果任何高度列中有值但相应的宽度为空,则顶部宽度将为空,例如对于线索引1:与宽度对应的高度为空白,因此顶部宽度列将为空白。
在我拥有的数据中,最后一列(顶部宽度)为空,需要填充,看起来像上面的表格,最后一个宽度值。
对于代码,我尝试过使用map和apply。特别是,我尝试使用带有apply方法的条件,但它不起作用。是否有人可以根据上述条件帮助填写顶部宽度列?
由于
答案 0 :(得分:0)
我认为需要:
#filter DataFrames by columns
a = df.filter(like='ht')
b = df.filter(like='w')
#boolean mask with XOR
m = (a.notnull().values ^ b.notnull().values).any(axis=1)
#get last values with replace to NaN by mask
df['new'] = b.ffill(axis=1).iloc[:, -1].mask(m)
print (df)
ht1 w1 ht2 w2 ht3 w3 new
Index
0 9 5 NaN NaN NaN NaN 5.0
1 7 2 3.0 NaN NaN NaN NaN
2 3 4 NaN NaN NaN NaN 4.0
3 4 3 5.0 6.0 NaN NaN 6.0
4 6 8 2.0 1.0 3.0 5.0 5.0