You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:12:56