根据不同的列将值应用于列

时间:2018-06-08 12:21:53

标签: python python-3.x pandas

我正在尝试进行一些有一些奇怪要求的数据操作:

 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方法的条件,但它不起作用。是否有人可以根据上述条件帮助填写顶部宽度列?

由于

1 个答案:

答案 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