如何在Pandas DataFrame中获取最小值之后的所有记录
如何获取Pandas DataFrame中最小值对应记录之后的所有数据?
先看你的场景:你有一个DataFrame列表,每个DataFrame包含Date和Value列,目标是找到Value列最小值对应的记录,再获取它之后的所有数据。比如你提供的样本数据里,最小值是7(对应2020-02-15那行),需要提取它之后的两条记录。
你尝试的代码是:
min1 = dfs[i].loc[dfs[i]['Value'] == dfs[i]['Value'].min()]['Date'].values[0] dfs[i][min1:]
结果触发了TypeError,提示无法用日期值对RangeIndex做切片——这个问题很好解决,咱们一步步拆解:
问题根源
你的DataFrame用的是默认的数字索引(0、1、2...),但你拿Date列的具体值去执行[min1:]切片操作,Pandas无法将日期值映射到数字索引上,自然抛出了类型错误。核心思路是:先找到最小值对应的行索引位置,再用索引来完成切片。
解决方案
方法一:基于原数据顺序取后续行
如果你的数据顺序就是你认定的“前后”顺序(比如样本里是从新日期到旧日期排列),直接用idxmin()获取最小值的第一个索引,再切片即可:
# 遍历你的DataFrame列表 for i in range(len(dfs)): current_df = dfs[i] # 找到Value列最小值对应的第一个行索引 min_row_index = current_df['Value'].idxmin() # 取最小值所在行之后的所有记录(若要包含最小值行,去掉+1即可) result = current_df.loc[min_row_index + 1:] # 可将result存为新变量或做后续处理 print(result)
针对你的样本数据,运行后输出为:
Date Value 4 2020-01-10 10.0 5 2019-12-07 15.0
方法二:按日期排序后再取(适用于乱序数据)
如果你的DataFrame中Date是乱排的,想要按时间先后的“之后”来提取数据,需要先把Date转成datetime类型并排序,再执行后续操作:
for i in range(len(dfs)): current_df = dfs[i].copy() # 将Date列转换为datetime类型,方便排序 current_df['Date'] = pd.to_datetime(current_df['Date']) # 按日期升序排序(旧日期在前,新日期在后) sorted_df = current_df.sort_values('Date') # 找到排序后最小值对应的索引 sorted_min_index = sorted_df['Value'].idxmin() # 提取最小值行之后的所有记录 sorted_result = sorted_df.loc[sorted_min_index + 1:] print(sorted_result)
补充:处理多个最小值的情况
如果Value列存在多个相同的最小值,idxmin()只会返回第一个出现的索引。若要提取所有最小值行之后的记录,可以先找出所有最小值的索引,再取最大的那个索引之后的行:
min_value = current_df['Value'].min() all_min_indices = current_df[current_df['Value'] == min_value].index last_min_index = all_min_indices.max() result = current_df.loc[last_min_index + 1:]
内容的提问来源于stack exchange,提问作者Hassan
相关产品推荐
相关产品推荐

