Фильтр Pandas Dataframe и For Loop - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть датафрейм со многими столбцами.Я пытаюсь отфильтровать один из этих столбцов («Регион») и создать отдельный фрейм данных на основе каждого из этих 4 регионов в столбце «Регион».А затем запустите большой блок кода, который содержит кучу вычислений для каждого из этих 4 отдельных фреймов данных, без необходимости перезаписывать большой блок кода 4 раза.

Я знаю, что могу использовать функцию .isin для фильтрации столбцов и сделать это для моих 4 регионов (США, EM, Европа, Азия):

US = df[df['Region'].isin('US')]
EM = df[df['Region'].isin('EM')]
Europe = df[df['Region'].isin('Europe')]
Asia = df[df['Region'].isin('Asia')]

И затем запустить мой блоккода на 4 новых фреймах данных.Но я выполняю свой большой блок кода вычисления 4 раза, и это слишком грязно.Как я могу сделать это в цикле, чтобы мне нужно было написать мой большой блок кода только один раз?Если есть другая функция, которую я могу использовать для этого, кроме цикла for, это также было бы здорово.Цени любую помощь - старайся учиться.

Пустой код:

df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['cats','dogs','birds','pianos','elephant','dinos'], 'Region' : ['EM', 'US', 'US', 'Europe', 'Asia', 'Asia']})

1 Ответ

0 голосов
/ 21 декабря 2018

Просто переберите объект groupby:

dfs = {}
for region, df_region in df.groupby('Region'):
    # do something to df_region
    # ...
    # then store in dictionary
    dfs[region] = df_region

Затем получите доступ к отдельным фреймам данных с помощью dfs['US'], dfs['Asia'] и т. Д.

Вы, конечно, можете настроить свою работубыть зависимым от region, но это не обязательно.Каждый df_region представляет кадр данных, отфильтрованный по df[df['Region'] == region].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...