Найдите самое последнее значение с учетом условия в фрейме данных pandas

#python #pandas #dataframe

Вопрос:

Я ищу, чтобы создать новый столбец, который возвращает самое последнее значение, которое не было значением «C»

Например, я хотел бы иметь возможность генерировать «New_Column», как показано ниже

  Current_Column    New_Column
      B               B
      S               S
      B               B
      S               S
      C               S
      B               B
      S               S
      C               S
      C               S
      B               B
 

Я пробовал использовать метод .shift (), который отлично работает до тех пор, пока вы не получите 2 или более последовательных значений «C».

Мне удалось создать столбец с помощью цикла for, который находится внутри .loc, но в больших масштабах это просто слишком медленно.

Спасибо за любую помощь.

Ответ №1:

попробуйте через where() и ffill() :

 df['New_Column']=df['Current_Column'].where(df['Current_Column']!='C').ffill()
 

или

через np.where() и ffill() :

 #import numpy as np  
df['New_Column']=np.where(df['Current_Column']!='C',df['Current_Column'],np.nan).ffill()
 

или

через mask() и ffill() :

 #thanks to @HenryEcker for this
df['New_Column']=df['Current_Column'].mask(df['Current_Column'].eq('C')).ffill()
 

Комментарии:

1. @Michael Если это решило ваш запрос, то вы можете попробовать рассмотреть возможность принятия ответа, чтобы указать другим, что проблема решена…. thnx 🙂