Получить максимальные значения диапазона, зависящего от даты и времени

Я надеюсь, что вы все в порядке.

У меня есть функция (ось Y), которая получает значения в соответствии с массивом datetime pandas (ось X), как показано ниже.

Эффективное освещение PVLIB-Python

Мне нужно получить все максимальные значения. Эти n максимальных значений зависят от количества дней между началом и концом pd.timestamp. Затем мне также нужно сохранить эти значения в массиве; что-то вроде этого:

max_values = [
    (A_value_1, B_value_1),
    (A_value_2, B_value_1),
        ...,
    (A_value_n, A_value_n)]

Примечание. B_value_# — это то же самое, о чем я прошу, но с другой функцией (A_values: освещенность и B_values: температура ячейки, просто контекстуализация для сообщества PVLIB-Python.

Для тех, кто знаком с PVLIB-Python, я пытаюсь получить кривую ВАХ с помощью функции pvsystem.calcparams_desoto (это потому, что я использую модуль CEC, и у него нет параметров, требуемых функцией SAPM. Часть этого кода вырезано ниже:

    IL, I0, Rs, Rsh, nNsVth = pvsystem.calcparams_desoto(
    effective_irrad_calc,
    pvtemps['temp_cell'],
    module['alpha_sc'],
    module['a_ref'],
    module['I_L_ref'],
    module['I_o_ref'],
    module['R_sh_ref'],
    module['R_s'],
    EgRef=1.121,
    dEgdT=-0.0002677
)

curve_info = pvsystem.singlediode(
    photocurrent=IL,
    saturation_current=I0,
    resistance_series=Rs,
    resistance_shunt=Rsh,
    nNsVth=nNsVth,
    ivcurve_pnts=100,
    method='lambertw'
)

# plot the calculated curves:
plt.figure()
for i, case in conditions.iterrows():
    label = (
        "$G_{eff}$ " + f"{case['Geff']} $W/m^2$\n"
        "$T_{cell}$ " + f"{case['Tcell']} $C$"
    )
    plt.plot(curve_info['v'][i], curve_info['i'][i], label=label)
    v_mp = curve_info['v_mp'][i]
    i_mp = curve_info['i_mp'][i]
    # mark the MPP
    plt.plot([v_mp], [i_mp], ls='', marker='o', c='k')

plt.legend(loc=(1.0, 0))
plt.xlabel('Module voltage [V]')
plt.ylabel('Module current [A]')
plt.title(parameters['Name'])
plt.show()
plt.gcf().set_tight_layout(True)

Примечание. Этот фрагмент кода взят по адресу: https://github.com/pvlib/pvlib-python/blob/master/docs/examples/plot_singlediode.py

Заранее спасибо. :)


person Nelson Salazar    schedule 20.05.2020    source источник


Ответы (1)


Сначала просто сделаю небольшой пример:

df = pd.DataFrame(index=pd.date_range('2020-01-01', freq='1h', periods=24*5))
df['irradiance'] = np.clip(np.cos(np.linspace(np.pi, 2*np.pi*5+np.pi, 24*5)), 
                           a_min=0, a_max=None)

Затем, используя функцию повторной выборки pandas с ежедневной частотой и максимальной функцией, вы получите ежедневное значение для пика:

max_value = df['irradiance'].resample('1d').max()

Точно так же можно найти местоположение максимального значения:

max_location = df['irradiance'].resample('1d').apply(lambda s: s.idxmax())

Теперь, зная местоположение/индекс максимального значения, вы можете применить его к другому столбцу вашего DataFrame.

person Adam Jensen    schedule 20.05.2020
comment
Это идеально, работает очень хорошо. Спасибо, что уделили мне время и помогли! :) - person Nelson Salazar; 20.05.2020