Как мне индексировать pandas фрейм данных, используя логическое индексирование? - PullRequest
1 голос
/ 04 мая 2020

Я запускаю новый учебный модуль в pandas, где мы занимаемся индексацией и фильтрацией данных. Я столкнулся с форматом цепочки методов, который не был объяснен в курсе, и мне было интересно, если кто-нибудь может помочь мне разобраться в этом. Набор данных взят из списков компаний из списка Fortune 500.

df = pd.read_csv('f500.csv', index_col = 0)

Проблема в том, что нас учили использовать логическое индексирование, передавая условие bool в фрейм данных следующим образом:

motor_bool = df["industry"] == "Motor Vehicles and Parts"
motor_countries = df.loc[motor_bool, "country"]

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

«Создать серию industry_usa, содержащую подсчет двух наиболее распространенных значений в столбце отрасли для компаний со штаб-квартирой в США.»

И код ответа:

industry_usa = f500["industry"][f500["country"] == "USA"].value_counts().head(2)

Я не понимаю, как мы можем внезапно использовать df [col] df [col] спина к спине? Разве я не должен сначала передать условие bool, а затем указать, какой столбец я хочу назначить, используя .lo c? Метод цепочки использованных очень отличается от того, что мы практиковали.

Пожалуйста, помогите. Я действительно в замешательстве.

Как всегда, спасибо вам, стек сообщества.

1 Ответ

2 голосов
/ 04 мая 2020

Я думаю, что последнее решение не рекомендуется , здесь лучше использовать DataFrame.loc как второе решение для получения столбца industry по маске, а затем получить счет:

industry_usa = f500.loc[f500["country"] == "USA", "industry"].value_counts().head(2)

Другое решение с Series.nlargest:

industry_usa = f500.loc[f500["country"] == "USA", "industry"].nlargest(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...