Я новичок. У меня есть фрейм данных, который содержит ежегодные данные о электрической нагрузке с разрешением 5 минут для 100 потребителей (каждый CSV имеет> 100 000 линий). Для конкретного клиента мне нужно найти скользящий максимальный получасовой спрос на каждый месяц. Поскольку мои данные за каждые 5 минут, я агрегирую 6 записей в мощность нагрузки колонки (кВт) подряд
ID Date_time load power (kW)
0 1/01/2018 0:00 0.191566105
1 1/01/2018 0:05 0.193145833
2 1/01/2018 0:10 0.192853152
3 1/01/2018 0:15 0.270974475
4 1/01/2018 0:20 0.290183338
5 1/01/2018 0:25 0.185485805
6 1/01/2018 0:30 0.208431765
7 1/01/2018 0:35 0.269577658
8 1/01/2018 0:40 0.268412758
9 1/01/2018 0:45 0.286095837
10 1/01/2018 0:50 0.301008341
11 1/01/2018 0:55 0.390496602
12 1/01/2018 1:00 0.406787652
13 1/01/2018 1:05 0.229862502
14 1/01/2018 1:10 0.190870833
15 1/01/2018 1:15 0.190224999
Значения мощности нагрузки (кВт) необходимо суммировать для 6 записей (5 минут * 6 = 30 минут) подряд, чтобы индекс 0-5, индекс 1-6, 2-7 ...
и найдите максимум в столбце succ_6 для каждого месяца
ID Date_time load power (kW) succ_6
0 1/01/2018 0:00 0.191566105 1.324208707
1 1/01/2018 0:05 0.193145833 1.341074367
2 1/01/2018 0:10 0.192853152 1.417506192
3 1/01/2018 0:15 0.270974475 1.493065799
4 1/01/2018 0:20 0.290183338 1.508187161
5 1/01/2018 0:25 0.185485805 1.519012164
6 1/01/2018 0:30 0.208431765 1.724022961
7 1/01/2018 0:35 0.269577658 1.922378848
8 1/01/2018 0:40 0.268412758 1.882663692
9 1/01/2018 0:45 0.286095837 1.805121767
10 1/01/2018 0:50 0.301008341 1.70925093
11 1/01/2018 0:55 0.390496602 1.604063424
12 1/01/2018 1:00 0.406787652 1.408709679
13 1/01/2018 1:05 0.229862502 1.192568766
14 1/01/2018 1:10 0.190870833 1.236928491
15 1/01/2018 1:15 0.190224999 1.321553317
Это должно быть сделано за каждый месяц
например 0-5, 1-6,2-7,3-8 ......
Я написал неэффективный код, который, как мне кажется, выполняет по назначению, но у одного потребителя уходит 36 минут, и мне нужно сделать это для> 100.
def monthly_hh_maximum (df_input, filenames,file_path):
# to store maximum half hourly demand (m_max) for each consumer for each month of year (m_o_y)
df_m_hh_max =pd.DataFrame(columns=['filename','m_o_y','m_max'])
# 100 consumers, 100 filenames
for filename in filenames:
print(filename)
#finds out unique months of year from date in given time series data
month_o_year=df_input[filename]['Date_conv'].unique()
#looping over months of year for one consumer
for m_o_y in month_o_year:
# find out the number of days in the given month
df_input_m_o_y_len=((df_input[filename].loc[df_input[filename]['Date_conv']==m_o_y]))['Date_conv'].size
df_temp=df_input[filename].loc[df_input[filename]['Date_conv']==m_o_y]
print(df_input_m_o_y_len)
monthly_mm=0
for i in range (0,df_input_m_o_y_len-6):
#Next line retrieves a view of dataframe which has data for that particular
# month and iteratively sums successive 6 elements of column load power to find the maximum
monthly_mm_temp= ((df_input[filename].loc[df_input[filename]['Date_conv']==m_o_y]))['load power (kW)'].iloc[i:i+6].sum()
print(i)
print(monthly_mm_temp)
print(m_o_y)
if(monthly_mm>monthly_mm_temp):
monthly_mm=monthly_mm
else:
monthly_mm=monthly_mm_temp
df_m_hh_max['filename']=filename
df_m_hh_max['m_o_y'] = m_o_y
df_m_hh_max['m_max'] = monthly_mm
Я пытаюсь сократить время вычислений, поскольку у меня ограниченные ресурсы, и я понимаю, что мой код неэффективен.