#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])
Вы можете выбрать и добавить кандидатов в список и преобразовать его в новый фрейм данных.