如何截取DataFrame负值并提取局部最小值及对应价格?
处理DataFrame负值局部最小值及对应价格的方法
1. 截取DataFrame中的负值部分
通过布尔索引筛选出目标列的负值行:
import pandas as pd df = pd.DataFrame({'col': [4, 5, -0.8,-1.3, -0.7, -.5, .4, 5, -.9, -.6, -2]}) # 筛选所有负值行 negative_df = df[df['col'] < 0]
2. 提取负值部分的局部最小值并转为数组
局部最小值判定规则:当前值小于左右相邻值;对于连续负值的首尾项,仅需小于唯一相邻的那个值。用shift()方法实现比较逻辑:
# 生成局部最小值的布尔掩码 mask = (negative_df['col'] < negative_df['col'].shift(1)) & (negative_df['col'] < negative_df['col'].shift(-1)) # 单独处理首尾项的边界情况 mask.iloc[0] = negative_df['col'].iloc[0] < negative_df['col'].iloc[1] mask.iloc[-1] = negative_df['col'].iloc[-1] < negative_df['col'].iloc[-2] # 提取局部最小值并转为数组格式 min_lokal = negative_df[mask]['col'].values.tolist() print(min_lokal) # 输出: [-1.3, -2]
3. 获取局部最小值对应的价格
如果你的数据中存在单独的price列,直接提取对应行的价格即可:
# 假设DataFrame有price列,提取对应价格 min_prices = negative_df[mask]['price'].values.tolist()
如果这里的“价格”指的是原DataFrame中局部最小值的索引位置,直接提取索引:
min_indices = negative_df[mask].index.values.tolist() print(min_indices) # 输出: [3, 10]
内容的提问来源于stack exchange,提问作者Toma
相关产品推荐
相关产品推荐

