如何在一定范围内找到最大值的x值?

How to find x-value of maximum in a certain range?

如何确定特定范围内数据集最大值的x值?

对于上下文,这些记录数据集如下所示:

这是所有数据集对应图的示例。

您可以使用argmax方法,其中returns最大值的索引。
假设您有这样的曲线:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2

fig, ax = plt.subplots()

ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')

ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')

plt.show()

上面的曲线被设计成在455.
有最大值 您可以找到最大值的索引:

value['Calib_1'].argmax()
# 5857

并用它通过loc方法得到对应的x轴值:

value.loc[value['Calib_1'].argmax(), 'Wavelength']
# 455.015501550155

如您所见,它 returns 的值大约接近 455 的精确值。错误将通过 numpy.linspace.
解决到 x 轴离散化 您可以在上面的图上绘制最大值:

id_max = value['Calib_1'].argmax()
x_max = value.loc[id_max, 'Wavelength']
y_max = value.loc[id_max, 'Calib_1']


fig, ax = plt.subplots()

ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')

ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')

plt.show()

如果你只需要一个特定范围的最大值,比如说[500, 550],那么首先你必须过滤数据帧,然后计算最大值的索引:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2

value_filt = value[(value['Wavelength'] >= 500) & (value['Wavelength'] <= 550)].reset_index()
id_max = value_filt['Calib_1'].argmax()
x_max = value_filt.loc[id_max, 'Wavelength']
y_max = value_filt.loc[id_max, 'Calib_1']


fig, ax = plt.subplots()

ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')

ax.axvline(x = 500, color = 'black', linestyle = '--')
ax.axvline(x = 550, color = 'black', linestyle = '--')

ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')

plt.show()