簡體   English   中英

獲取日期時間相關范圍的最大值

[英]Get Max Values of a Datetime Dependent Range

我希望你們都很好。

我得到了一個 function(Y 軸),它根據日期時間 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_#與我要求的相同,但與另一個 function 相同(A_values:輻照度和 B_values:細胞溫度,只是PVLIB-Python社區的上下文。

對於那些熟悉PVLIB-Python的人,我試圖通過使用pvsystem.calcparams_desoto function 來獲得 IV 曲線(這是因為我使用的是 CEC 模塊並且它沒有SAPM function 所需的參數。這段代碼的片段如下:

    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

提前致謝。 :)

首先只是做一個小例子:

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 的重采樣 function 和每日頻率和最大 function,將為您提供峰值的每日值:

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

同樣可以找到最大值的位置:

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

現在知道最大值的位置/索引,您可以將其應用於 DataFrame 的另一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM