поместите все элементы, содержащие определенную строку в фрейме данных, в другой столбец

#python #pandas

Вопрос:

Фрейм данных, который у меня сейчас есть, выглядит следующим образом

 In[1]: df
Out[1]:
index    yesterday    today    tomorrow   
1        apple_1      banana_3 cherry_4   
2        pear_2       apple_4  blueberry_1 
3        kiwi_3       orange_6 banana_2   
4        apple_1      melon_3  banana_4  
 

Я хочу записать все яблоки и поместить их в другую колонку/серию, например

 index    yesterday    today    tomorrow    apple
1        apple_1      banana_3 cherry_4    apple_1
2        pear_2       apple_4  blueberry_1 apple_4
3        kiwi_3       orange_6 banana_2    nan
4        apple_1      melon_3  banana_4    apple_2
 
  1. IDK, в каком столбце будет содержаться яблоко
  2. ИДК, что еще с яблоком

Спасибо за помощь!

Ответ №1:

Попробуйте с startswith помощью затем where маски затем как нан и сделайте ffill

 df['new'] = df.where(df.apply(lambda x : x.str.startswith('apple'))).ffill(1).iloc[:,-1]
df
Out[149]: 
      yesterday     today     tomorrow      new
index                                          
1       apple_1  banana_3     cherry_4  apple_1
2        pear_2   apple_4  blueberry_1  apple_4
3        kiwi_3  orange_6     banana_2      NaN
4       apple_1   melon_3     banana_4  apple_1
 

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

1. Выглядит хорошо! только один вопрос, что делать, если в исходном кадре данных есть значения nan? это дает мне ошибки, например, Можно использовать доступ .str только со строковыми значениями!

2. @IRK df.где(df.fillna(«).подать заявку(лямбда x : x.str.начинается с(«яблоко»)). ffill(1).iloc[:,-1]