Как создать новый столбец на основе условия в Pandas


Часто вам может понадобиться создать новый столбец в кадре данных pandas на основе некоторого условия.

В этом руководстве представлено несколько примеров того, как это сделать с помощью следующего DataFrame:

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view DataFrame
df

 rating points assists rebounds
0 90 25 5 11
1 85 20 7 8
2 82 14 7 10
3 88 16 8 6
4 94 27 5 6
5 90 20 7 9
6 76 12 6 6
7 75 15 9 10
8 87 14 9 10
9 86 19 5 7

Пример 1. Создание нового столбца с двоичными значениями

В следующем коде показано, как создать новый столбец с именем «Хорошо», где значение «да», если количество баллов в данной строке превышает 20, и «нет», если нет:

#create new column titled 'Good'
df['Good'] = np.where(df['points']>20, 'yes', 'no')

#view DataFrame 
df

 rating points assists rebounds Good
0 90 25 5 11 yes
1 85 20 7 8 no
2 82 14 7 10 no
3 88 16 8 6 no
4 94 27 5 6 yes
5 90 20 7 9 no
6 76 12 6 6 no
7 75 15 9 10 no
8 87 14 9 10 no
9 86 19 5 7 no

Пример 2. Создание нового столбца с несколькими значениями

В следующем коде показано, как создать новый столбец с именем «Хорошо», где значение равно:

  • «Да», если количество баллов ≥ 25
  • «Возможно», если 15 ≤ баллов < 25
  • «Нет», если баллы < 15
#define function for classifying players based on points
def f(row):
 if row['points'] < 15:
 val = 'no'
 elif row['points'] < 25:
 val = 'maybe'
 else :
 val = 'yes'
 return val

#create new column 'Good' using the function above
df['Good'] = df.apply (f, axis=1)

#view DataFrame 
df

 rating points assists rebounds Good
0 90 25 5 11 yes
1 85 20 7 8 maybe
2 82 14 7 10 no
3 88 16 8 6 maybe
4 94 27 5 6 yes
5 90 20 7 9 maybe
6 76 12 6 6 no
7 75 15 9 10 maybe
8 87 14 9 10 no
9 86 19 5 7 maybe

Пример 3. Создание нового столбца на основе сравнения с существующим столбцом

В следующем коде показано, как создать новый столбец с именем «assist_more», где значение равно:

  • «Да», если передачи > подборов.
  • «Нет» иначе.
#create new column titled 'assist_more'
df['assist_more'] = np.where(df['assists']>df['rebounds'], 'yes', 'no')

#view DataFrame 
df

 rating points assists rebounds assist_more
0 90 25 5 11 no
1 85 20 7 8 no
2 82 14 7 10 no
3 88 16 8 6 yes
4 94 27 5 6 no
5 90 20 7 9 no
6 76 12 6 6 no
7 75 15 9 10 no
8 87 14 9 10 no
9 86 19 5 7 no

Вы можете найти больше руководств по Python здесь .