这个问题实际上与我两天前发布的一个问题有关。仅供参考,这是它的链接: 问题版本1
由于我的思考方式显然没有答案,所以我的想法是过滤数据。 所以,我有这个数据集:
d = {'Point': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
'Interval 1': [92.417, 117.364, 126.302, 121.816, 126.083, 85.267, 84.977, 85.610, 84.909, 84.535, 85.024, 85.059, 84.798, 84.001, 84.157, 104.918,'','','','','','','','','','','','','','','','','','','','','','','',''],
'Interval 2':['','','','','','','','','','','','','','','','',157.884,163.604,122.905,84.770,83.386,83.530,83.418,83.423,83.350,83.618,83.486,83.846,83.622,83.796,83.942,84.068,84.379,84.175,84.010,84.439,84.479,84.599,84.998,101.860]}
我将数据集转换为数据框:
data = pd.DataFrame(d)
然后对数据进行过滤,以便我仅获得间隔 1 和 2 中最低 10% 的值。
我寻找两列中的最小值:
min_val = min(data['Interval 1'].apply(pd.to_numeric,errors='coerce').min(), data['Interval 2'].apply(pd.to_numeric,errors='coerce').min())
然后我需要将空字符串转换为 NaN
cols = ['Interval 1', 'Interval 2']
data[cols] = data[cols].apply(pd.to_numeric, errors='coerce')
数据在 Excel 图表中的显示如下: 我想做的是让 python 代码查看数据并仅选择两个系列的低值。比如查看第一个值,然后检查下一个值是否更高 -> 如果是,则存储第一个值,如果不是,则临时存储第二个值并对所有数据点重复该过程。 也许还有其他选择,我愿意接受所有建议。 谢谢!
我正在尝试提炼你的问题。
首先,我不知道你想用
min_val
达到什么目的,你得到了它,然后你就不再提它了。
其次,您显示的图表与您提供的数据不符。显然,
Interval 1
在高度约 85 处有一个“平坦”部分。
无论如何,我会尽力回答你的主要问题。要以“pandas”方式执行此操作,您应该使用
shift
。让我们重点关注Interval 1
。您可以像这样创建一个移位列:`data['Interval 1 moving'] = data['Interval 1'].shift(1) - 这会将列移位 1。
然后,您可以通过将其与其移位列进行比较来按
data['Interval 1']
进行过滤,就像链接的问题一样:
data['lower points interval 1'] = data['Interval 1 next row'] > data['Interval 1']
这将创建一个包含 True/False 的列,您可以对其进行过滤。