Pandas: как заменить значения в столбце на основе условия


Вы можете использовать следующий базовый синтаксис для замены значений в столбце кадра данных pandas на основе условия:

#replace values in 'column1' that are greater than 10 with 20
df.loc[df['column1'] > 10, 'column1'] = 20

В следующих примерах показано, как использовать этот синтаксис на практике.

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

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
 'position': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
 'points': [5, 7, 7, 9, 12, 13, 9, 14],
 'assists': [3, 8, 2, 6, 6, 5, 9, 5]})

#view DataFrame
df

 team position points assists
0 A G 5 3
1 A G 7 8
2 A F 7 2
3 A F 9 6
4 B G 12 6
5 B G 13 5
6 B F 9 9
7 B F 14 5

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

#replace any values in 'points' column greater than 10 with 20
df.loc[df['points'] > 10, 'points'] = 20

#view updated DataFrame
df

 team position points assists
0 A G 5 3
1 A G 7 8
2 A F 7 2
3 A F 9 6
4 B G 20 6
5 B G 20 5
6 B F 9 9
7 B F 20 5

Обратите внимание, что каждое из трех значений в столбце «точки», которые были больше 10, были заменены значением 20.

Пример 2. Замена значений в столбце на основе нескольких условий

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
 'position': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
 'points': [5, 7, 7, 9, 12, 13, 9, 14],
 'assists': [3, 8, 2, 6, 6, 5, 9, 5]})

#view DataFrame
df

 team position points assists
0 A G 5 3
1 A G 7 8
2 A F 7 2
3 A F 9 6
4 B G 12 6
5 B G 13 5
6 B F 9 9
7 B F 14 5

Мы можем использовать следующий код, чтобы заменить каждое значение в столбце «позиция», где количество очков меньше 10 или где количество передач меньше 5, строкой «Плохо»:

#replace string in 'position' column with 'bad' if points < 10 or assists < 5
df.loc[(df['points'] < 10) |(df['assists'] < 5), 'position'] = 'Bad '

#view updated DataFrame
df

 team position points assists
0 A Bad 5 3
1 A Bad 7 8
2 A Bad 7 2
3 A Bad 9 6
4 B G 20 6
5 B G 20 5
6 B Bad 9 9
7 B F 20 5

Точно так же мы можем использовать следующий код, чтобы заменить каждое значение в столбце «позиция», где количество очков меньше 10 и где количество передач меньше 5, строкой «Плохо»:

#replace string in 'position' column with 'bad' if points < 10 and assists < 5
df.loc[(df['points'] < 10) &(df['assists'] < 5), 'position'] = 'Bad '

#view updated DataFrame
df

 team position points assists
0 A Bad 5 3
1 A G 7 8
2 A Bad 7 2
3 A F 9 6
4 B G 12 6
5 B G 13 5
6 B F 9 9
7 B F 14 5

Обратите внимание, что в двух строках, где количество очков было меньше 10, а количество передач меньше 5, значение «позиция» было заменено строкой «Плохо».

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

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