获取日期时间相关范围的最大值
Get Max Values of a Datetime Dependent Range
希望你们一切都好
我有一个函数(Y 轴)根据日期时间 pandas 数组(X 轴)获取值,如下所示。
我需要得到所有的最大值。这 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
函数来获得I-V曲线(这是因为我使用的是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
提前致谢。 :)
先举个小例子:
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())
现在知道最大值的 location/index,您可以将其应用于 DataFrame 的另一列。
希望你们一切都好
我有一个函数(Y 轴)根据日期时间 pandas 数组(X 轴)获取值,如下所示。
我需要得到所有的最大值。这 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
函数来获得I-V曲线(这是因为我使用的是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
提前致谢。 :)
先举个小例子:
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())
现在知道最大值的 location/index,您可以将其应用于 DataFrame 的另一列。