Панды: Есть ли способ перебирать фрейм данных и создавать новые фреймы данных, используя несколько условий?

#python #pandas #conditional-statements #iterable

Вопрос:

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

У меня есть фрейм данных, который выглядит так:

Полный кадр данных

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

Я надеюсь получить в итоге кучу кадров данных с условиями, в которых, например:

Z_year = 2020, Z_месяц = 5, Z_group = ‘день недели’, диапазон времени = ‘с 08:00 до 12:00’

Z_year = 2020, Z_месяц = 5, Z_group = «день недели», диапазон времени = «с 12:00 до 18:00»

Z_year = 2020, Z_месяц = 5, Z_group = «день недели», диапазон времени = «с 18:00 до 01:00»

Z_year = 2020, Z_месяц = 5, Z_group = «выходные», диапазон времени = «с 08:00 до 12:00»

Z_year = 2020, Z_месяц = 5, Z_group = «выходные», диапазон времени = «с 12:00 до 18:00»

Z_year = 2020, Z_месяц = 5, Z_group = «выходные», диапазон времени = «с 18:00 до 01:00»

Z_year = 2020, Z_месяц = 8, Z_group = ‘день недели’, диапазон времени = ‘с 08:00 до 12:00’

Z_year = 2020, Z_месяц = 8, Z_group = «день недели», диапазон времени = «с 12:00 до 18:00»

Z_year = 2020, Z_месяц = 8, Z_group = «день недели», диапазон времени = «с 18:00 до 01:00»

Z_year = 2021, Z_месяц = 11, Z_Group = «выходные», диапазон времени = «с 18:00 до 01:00″

и т.д.

До тех пор, пока все комбинации не будут завершены.

Есть ли способ повторить мой фрейм данных, чтобы сделать это?

Целевыми столбцами являются (Год, месяц, группа и диапазон времени), и уникальные значения для каждого из них: (2020, 2021), (5, 8, 11), (‘будний день», «выходные») и (с 08:00 до 12:00, с 12:00 до 18:00, с 18:00 до 01:00)

 #This is used to find unique values for target columns year_list = df['Z_year'].unique()  #Creating a new dataframe using only target values a = df.loc[(df['Z_year'] == 2020) amp; (df['Z_month'] == 5) amp; (df.loc['Z_group'] == 'weekday') amp; (df.loc['time_range'] == '08:00 to 12:00')]  

Спасибо за вашу помощь!

Ответ №1:

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

 dic = {} for a in [2020,2021]:  for b in [5, 8, 11]:  for c in ['weekday', 'weekend']:  for d in ['08:00 to 12:00', '12:00 to 18:00', '18:00 to 01:00']:  idf = str(a) str(b) c d  dic[idf] = df.loc[(df['Z_year'] == a) amp; (df['Z_month'] == b) amp; (df.loc['Z_group'] == c) amp; (df.loc['time_range'] == d)]  

Ответ №2:

Вы можете перебирать фрейм данных следующим образом:

 cols, rows = df.shape for x in range(cols):  print(df[x:x 1])  

Вы можете выбрать и добавить кандидатов в список и преобразовать его в новый фрейм данных.