Pandas新手求助:如何获取极值对应的完整行数据
获取Pandas中Close列极值对应的完整行数据
作为Pandas新手,目前只能提取Close列的极值数值,无法获取这些极值对应的完整行数据。现有代码如下:
df = pd.read_csv('test.csv') df['min'] = df.iloc[argrelextrema(df.Close.values, np.less_equal, order=10)[0]]['Close'] df['max'] = df.iloc[argrelextrema(df.Close.values, np.greater_equal, order=10)[0]]['Close'] # create lists for `min` and `max` min_values_list = df['min'].dropna().tolist() max_values_list = df['max'].dropna().tolist() print(min_values_list, max_values_list)
数据样例:
Datetime,Date,Open,High,Low,Close 2021-01-11 00:00:00+00:00,18638.0,1.2189176082611084,1.2199585437774658,1.2186205387115479,1.2192147970199585
解决方案
不需要额外创建min/max列,直接利用argrelextrema返回的索引提取整行数据即可:
import pandas as pd import numpy as np from scipy.signal import argrelextrema df = pd.read_csv('test.csv') # 获取局部最小值对应的完整行 min_extrema_rows = df.iloc[argrelextrema(df.Close.values, np.less_equal, order=10)[0]] # 获取局部最大值对应的完整行 max_extrema_rows = df.iloc[argrelextrema(df.Close.values, np.greater_equal, order=10)[0]] # 打印结果 print("局部最小值行:") print(min_extrema_rows) print("\n局部最大值行:") print(max_extrema_rows) # 若需转为列表格式(每行转为字典) min_rows_list = min_extrema_rows.to_dict('records') max_rows_list = max_extrema_rows.to_dict('records') print("\n局部最小值行字典列表:") print(min_rows_list)
说明
argrelextrema返回的是极值在原数组中的索引位置,直接用df.iloc[索引]就能提取对应整行,包含所有列数据to_dict('records')将每行转为字典,方便后续处理;如果需要纯列表格式,可改用min_extrema_rows.values.tolist()
内容的提问来源于stack exchange,提问作者tiberhockey
相关产品推荐
相关产品推荐

