Добавить новый столбец на основе существующих столбцов
Панды новичок здесь.
Я пытаюсь создать новый столбец в моем фрейме данных, который будет служить меткой обучения, когда я добавлю это в классификатор.
Значение столбца метки равно 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)