Как сделать фильтр по двум критериям при создании нового столбца в пандах - PullRequest
1 голос
/ 18 октября 2019

Я хочу создать новый столбец, который возвращает значение, если оно соответствует критериям обоих столбцов существующего df.

df = pd.DataFrame({
  'first_column': [1, 2, 3, 5],
  'second_column': [10, 20, 30, 50]
})

df.loc[df.first_column <= 3, 'new_column'] = 'good'
df.loc[df.first_column == 1, 'new_column'] = 'bad'
df.loc[df.first_column >= 4, 'new_column'] = 'great'

Это работает для одного условия (хотя я предполагаю, что есть способ сказать между 2 и 3, что я действительно хочу для первой строки)

Но я не могуразберись, как заставить это сделать что-то такое, где я мог бы сказать, если df.first_column >= 4 AND df.second_column >= 50 = 'super great'

1 Ответ

1 голос
/ 18 октября 2019

Метод 1: pd.cut

То, что вы хотите, это pd.cut, чтобы назначить «метки» для определенных «диапазонов», в данном случае называемых bins:

df['new_column'] = pd.cut(df['first_column'],
                   bins=[-np.inf, 1,3,50, np.inf],
                   labels=['bad', 'good', 'great', 'supergreat'])

   first_column  second_column new_column
0             1             10        bad
1             2             20       good
2             3             30       good
3             5             50      great

Метод 2: np.select:

Мы также можем использовать numpy.select, который принимает несколько условий и на основе этих условий возвращает значение (выбор):

conditions = [
    df['first_column'] <= 1,
    df['first_column'].between(1, 3),
    (df['first_column'] >= 4) & (df['second_column'] >= 50),
    df['first_column'] >= 4
]

choices = ['bad', 'good', 'supergreat', 'great']

df['new_column'] = np.select(conditions, choices)

   first_column  second_column  new_column
0             1             10         bad
1             2             20        good
2             3             30        good
3             5             50  supergreat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...