Создание фрейма данных с динамическими диапазонами дат с использованием отфильтрованных результатов из другого фрейма данных - PullRequest
0 голосов
/ 19 октября 2019

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

Empty DataFrame
Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]

Это будет заполнено:

Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]
widgets, 67, 54, 33

Содержимое будет заполняться с другого фрейма данных, который построен как:

Columns: [department, date, productid]
widget, 5/20/2018, 1234567
widget, 7/7/2019, 78987

ТакЯ создаю фрейм данных, получаю данные для каждого диапазона (путем фильтрации другого фрейма данных) и затем заполняю их. Пользователь будет указывать, сколько лет диапазонов должно быть указано в окончательном кадре данных. Есть еще один скрипт, который возвращает список дат для использования:

#generate a list of years within report range
timeframes_yrs = pd.date_range(start_date,end_date, freq='12MS').strftime('%m/%d/%Y').tolist()

Кажется, есть несколько способов, которыми я могу сделать это: 1. Используя цикл for, динамически назначайте новые переменные для фреймов данных, которые фильтруютвещи внеВ какой-то момент объедините все это по отделам. Что-то вроде (упрощенный пример):

x=0
for yr in timeframes_yrs:
    filter_dates[x] = df[(df['date'] > yr)] 
    x=x+1
#iterate through the new variables and merge them here
В цикле for я мог бы объединить фрейм данных в конце цикла. Что-то вроде (упрощенный пример):
for yr in timeframes_yrs:
    filter_dates = df[(df['date'] > yr)] 
    #merge the result here
Я мог бы установить фрейм данных со столбцами динамической даты, перебрать и заполнить строки / значения ниже

Из того, что я прочитал, динамические переменные - плохая идея. Если в Пандах нет какого-либо другого инструмента, о котором я не знаю, или более «питонского» способа сделать это (например, преобразовать данные в словарь, серию и т. Д., А затем передать обратно), я не уверен, как решить эту проблему. Есть ли другой способ сделать это, что мне не хватает? Должен ли я оставить цикл «для» из этого и попробовать его, используя только инструменты, доступные в Pandas (создание нового столбца с помощью «запроса» или аналогичного)?

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