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

Я пытаюсь создать новый столбец в пандах, используя оператор if. У меня есть это df:

df = {'Col1': [7,6,-9],
      'Col2': [0.5,0.5,0.5],
      'Col3': [5,4,3]}

Если Col1 больше 0, то я хотел бы умножить Col2 на Col3, чтобы создать новый столбец, Col4. Если Col1 не больше 0, тогда я просто хотел бы вернуть 0 в качестве значения столбца.

Вот что я пытался:

df['Col4'] = if df['Col1'] > 0:
    df['Col2'] * df['Col3']
else:
    0  

Я получаю сообщение об ошибке: «SyntaxError: неверный синтаксис»

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

df = {'Col1': [7,6,-9],
      'Col2': [0.5,0.5,0.5],
      'Col3': [5,4,3],
      'Col4': [2.5,2,0]}

Обратите внимание, что, поскольку в Col1 "-9" не больше 0, Col4 должно давать 0.

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Я бы использовал np.where:

>>> df['Col4'] = np.where(df['Col1'] > 0, df['Col2'] * df['Col3'], 0)                                                   
>>> df
Col1  Col2  Col3  Col4
0     7   0.5     5   2.5
1     6   0.5     4   2.0
2    -9   0.5     3   0.0 

По сути, , где df['Col1'] больше нуля, соответствующий элемент в Col4 будет df['Col2'] * df['Col3']. В противном случае это будет ноль.

Также есть pd.DataFrame.where, который я считаю немного более громоздким:

>>> df['Col4'] = (df['Col2'] * df['Col3']).where(df['Col1'] > 0, 0)

Вы можете увидеть этот ответ для деталей.

1 голос
/ 07 ноября 2019

Ваш синтаксис неверен. Я думаю, что это ближе к тому, что вы хотели:

import pandas as pd

df = pd.DataFrame({'Col1': [7, 6, -9],
                   'Col2': [0.5, 0.5, 0.5],
                   'Col3': [5, 4, 3]})
print(df)
print()

def product(row):
    if row['Col1'] > 0:
        return row['Col2'] * row['Col3']
    else:
        return 0


df['Col4'] = df.apply(product, axis=1)
print(df)

Вывод:

   Col1  Col2  Col3  Col4
0     7   0.5     5   2.5
1     6   0.5     4   2.0
2    -9   0.5     3   0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...