更新:我已经简化了问题:
我有以下数据框:
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'])
我想创建一个新的数据框,如下所示:
我设法创建了一个空白的最终数据框:
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
但是,我不知道将其添加到循环中并将其用于df_input中的所有行的最快方法。我尝试通过数据框搜索迭代,但是整个互联网都反对它是非常慢的方法。
有没有最快的方法?