Не могу найти правильный способ реализации оператора if на кадре данных с применением лямбды - PullRequest
1 голос
/ 30 мая 2019

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

Я пробовал:

df['New Value'] = df[['Name ']].apply((lambda x: df['Value'] * 2 if x == 'John' else df['Value']) , axis=0)

При этом я получаю следующую ошибку:

ValueError: ('Истинное значение Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().', 'В Имя индекса ')

Что я понимаю, так это то, что x - это серия, и я не могу сравнить со строкой, это правильно? Если нет, что это значит?

В любом случае, как обойти эту проблему?

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Вы применяете операцию только к кадру данных столбца 'Name', а при работе с построчной операцией установите axis=1

Попробуйте это для своего варианта использования.

df['New Value'] = df.apply(lambda x: x['Value'] * 2 if x['Name'] == 'John' else x['Value'], axis=1)

Решение

In [49]: df
Out[49]:
    Name  Value
0   John      5
1  Kevin      5

In [50]: df['New Value'] = df.apply(lambda x: x['Value'] * 2 if x['Name'] == 'John' else x['Value'], axis=1)

In [51]: df
Out[51]:
    Name  Value  New Value
0   John      5         10
1  Kevin      5          5
1 голос
/ 30 мая 2019

Вы можете использовать , где , чтобы сделать это:

df['New Value'] = (df['Value'] * 2).where(df['Name'] == 'John',  df['Value'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...