Добавить новый столбец на основе существующих столбцов

Панды новичок здесь.

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

Значение столбца метки равно 1,0, если у данного идентификатора есть (Value1 > 0) или (Value2 > 0) для яблок или груш, и 0,0 в противном случае.

Мой фрейм данных индексируется по Id и выглядит следующим образом:

Out[30]: 
                Value1                                               Value2  \
    ProductName    7Up     Apple Cheetos     Onion      Pear PopTart    7Up   
    ProductType Drinks Groceries  Snacks Groceries Groceries  Snacks Drinks   
Id                                                                        
100                0.0       1.0     2.0       4.0       0.0     0.0    0.0   
101                3.0       0.0     0.0       0.0       3.0     0.0    4.0   
102                0.0       0.0     0.0       0.0       0.0     2.0    0.0   


    ProductName     Apple Cheetos     Onion      Pear PopTart  
    ProductType Groceries  Snacks Groceries Groceries  Snacks  
Id                                                         
100                   1.0     3.0       3.0       0.0     0.0  
101                   0.0     0.0       0.0       2.0     0.0  
102                   0.0     0.0       0.0       0.0     1.0  

Если бы волшебники панд могли бы помочь мне с синтаксисом этой операции - мой разум изо всех сил пытается собрать все это вместе.

Спасибо!

2 ответа

Решение

Ответ, предоставленный @ vlad.rad, работает, но он не очень эффективен, поскольку pandas вынужден вручную зацикливаться в Python на всех строках, не имея возможности воспользоваться преимуществами ускорения векторизованных функций. Следующее векторизованное решение должно быть более эффективным:

condition = (df['Value1'] > 0) | (df['Value2'] > 0)
df.loc[condition, 'label'] = 1.
df.loc[~condition, 'label'] = 0.

Определите свою функцию:

def new_column (x):
       if x['Value1'] > 0 :
          return '1.0'
       if x['Value2'] > 0 :
          return '1.0'
       return '0.0'

Примените это к своим данным:

df.apply (lambda x: new_column (x),axis=1)
Другие вопросы по тегам