Выполните итерацию по строкам кадра данных, чтобы заполнить другой кадр данных - PullRequest
0 голосов
/ 28 марта 2020

Обновление : я упростил задачу:

У меня есть следующий фрейм данных:

data = {'Portfolio':  ['Book1', 'Book2', 'Book1', 'Book2'],
        'Instrument': ['Water', 'Fire',  'Water', 'Water'],
        'Value':      [10,      5,       6,       11],
        'Start': [datetime(2021, 1, 1), datetime(2021, 1, 1), datetime(2021, 1, 1), datetime(2021, 1, 1)],
        'End': [datetime(2021, 12, 31), datetime(2021, 3, 31), datetime(2021, 12, 31), datetime(2021, 21, 31)]
        }
df_input = pd.DataFrame(data, columns=['Portfolio', 'Instrument', 'Value', 'Start', 'End'])

enter image description here

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

enter image description here

Мне удалось создать пустой окончательный фрейм данных:

index = pd.date_range(start=df_input['Start'].min(), end=df_input['End'].max().replace(hour=23), freq='H')
col_list = [(x, y, '-') for x, y in df_input.groupby(['Portfolio', 'Instrument']).size().to_dict().keys()]
df_final = pd.DataFrame(0, index=index, columns=pd.MultiIndex.from_tuples(col_list))

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

df_final.loc[(df_final.index >= datetime(2021, 1, 1)) &
             (df_final.index <= datetime(2021, 3, 31).replace(hour=23),('Book2', 'Fire', '-')] += 5

Однако я не знаю, какой самый быстрый способ добавить это в al oop и использовать его для всех строк в df_input. Я пробовал искать итерации в кадре данных, но целое число rnet против этого как очень медленный метод.

Есть ли самый быстрый способ?

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