Применение значений к столбцу на основе разных столбцов - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь сделать небольшую манипуляцию данными, которая имеет некоторые странные требования:

 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: соответствующая высота ширине пуста, поэтому верхний столбец ширины будет пустым.

В данных, которые у меня есть, последний столбец (верхняя ширина) пуст и должен быть заполнен, чтобы выглядеть как таблица выше с последним значением ширины.

Для кода у меня естьпопытался использовать карту и применить.В частности, я пытался использовать условие с методом apply, но оно не сработало.Есть ли кто-нибудь, кто может помочь заполнить верхний столбец ширины на основе условий, изложенных выше?

Спасибо

1 Ответ

0 голосов
/ 08 июня 2018

Я думаю, что нужно:

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...