Получить последнее значение на основе значения другого столбца с пандами - PullRequest
0 голосов
/ 08 июня 2018

У меня есть набор данных с заказами и бронированиями, заказанными пользователями.У меня есть один столбец, который является истинным, когда это бронирование, и ложным, когда это поиск, и мне нужно добавить еще один столбец «предыдущий заказ», который должен иметь значение последнего бронирования.

   user    visit_type  booking  search  visit_num         hotel
0  user1   busqueda     False    True         1             NaN
1  user1   busqueda     False    True         2             NaN
2  user1   reserva      True     False        3             15
3  user2   busqueda     False    True         1             NaN
4  user2   busqueda     False    True         2             NaN
5  user2   reserva      True     False        3             156
6  user2   reserva      True     False        3             156
7  user2   busqueda     False    True         4             NaN
8  user2   busqueda     False    True         5             NaN
9  user2   reserva      True     False        6             123

И японадобится что-то вроде этого:

user visit_type  booking  search  visit_num       hotel         latest_booking
0  user1   busqueda     False    True         1             NaN         NaN
1  user1   busqueda     False    True         2             NaN         NaN
2  user1   reserva      True     False        3             15          NaN
3  user2   busqueda     False    True         1             NaN         NaN
4  user2   busqueda     False    True         2             NaN         NaN
5  user2   reserva      True     False        3             156         NaN
6  user2   reserva      True     False        3             156         156
7  user2   busqueda     False    True         4             NaN         NaN
8  user2   busqueda     False    True         5             NaN         NaN 
9  user2   reserva      True     False        6             123         156
10 user2   reserva      True     False        6             135         123

1 Ответ

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

Используя shift + ffill, затем преобразовав booking = False строки в NaN.

df['latest_booking'] = df.groupby('user')['hotel'].apply(lambda x: x.shift().ffill())
df.loc[~df['booking'], 'latest_booking'] = np.nan

print(df)

    user visit_type booking search  visit_num  hotel  latest_booking
0  user1   busqueda   False   True          1    NaN             NaN
1  user1   busqueda   False   True          2    NaN             NaN
2  user1    reserva    True  False          3   15.0             NaN
3  user2   busqueda   False   True          1    NaN             NaN
4  user2   busqueda   False   True          2    NaN             NaN
5  user2    reserva    True  False          3  156.0             NaN
6  user2    reserva    True  False          3  156.0           156.0
7  user2   busqueda   False   True          4    NaN             NaN
8  user2   busqueda   False   True          5    NaN             NaN
9  user2    reserva    True  False          6  123.0           156.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...