Подтвердить что ты не робот

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

У меня есть простой DataFrame, как показано ниже:

Pandas DataFrame

Я хочу выбрать все значения из столбца "Первый сезон" и заменить те, которые превышают 1990 год на 1. В этом примере только Балтиморские раны заменили бы на 1996 год на 1 (сохраняя остальную часть данных без изменений).

Я использовал следующее:

df.loc[(df['First Season'] > 1990)] = 1

Но он заменяет все значения в этой строке на 1, а не только значения в столбце "Первый сезон".

Как заменить только значения из этого столбца?

4b9b3361

Ответ 1

Вам нужно выбрать этот столбец:

In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df

Out[41]:
                 Team  First Season  Total Games
0      Dallas Cowboys          1960          894
1       Chicago Bears          1920         1357
2   Green Bay Packers          1921         1339
3      Miami Dolphins          1966          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers          1950         1003

Итак, синтаксис здесь:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

Вы можете проверить docs, а также 10 минут до pandas, который показывает семантика

ИЗМЕНИТЬ

Если вы хотите сгенерировать логический индикатор, вы можете просто использовать логическое условие для генерации логической серии и отбрасывать dtype на int, это преобразует True и False в 1 и 0 соответственно:

In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df

Out[43]:
                 Team  First Season  Total Games
0      Dallas Cowboys             0          894
1       Chicago Bears             0         1357
2   Green Bay Packers             0         1339
3      Miami Dolphins             0          792
4    Baltimore Ravens             1          326
5  San Franciso 49ers             0         1003

Ответ 2

Немного опоздал на вечеринку, но все же - я предпочитаю использовать numpy где:

import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])

Ответ 3

У меня есть следующий вопрос:

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

все страны с> 1000000 получают "БОЛЬШОЙ" и <= 1000000 получают "МАЛЕНЬКИЙ" в замененной ячейке

Спасибо

Ответ 4

df.First Season.loc[(df['First Season'] > 1990)] = 1