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

如何在Pandas DataFrame中获取time列非零的最小时间对应行

解决方法:获取DataFrame中time最小且非0的对应行

我来帮你搞定这个需求!你之前的尝试没拿到整行数据,主要是因为min()返回的是各列最小值的汇总,而单独对time列用nsmallest只拿到了数值,没关联到整行。下面给你几种高效的解决方案:

方法一:用nsmallest直接筛选(推荐,大数据量更高效)

nsmallest可以直接对过滤后的数据集,按指定列取最小的N行,完美匹配你的需求:

# 先过滤time>0的行,再取time最小的1行
result_df = df[df['time'] > 0].nsmallest(1, 'time')

如果你想要单行的Series格式,直接加.iloc[0]即可:

result_series = df[df['time'] > 0].nsmallest(1, 'time').iloc[0]

用你的示例数据测试,会返回x=240, y=19, time=9.7这一行。

方法二:排序后取首行

先过滤非0时间,再按time升序排序,最后取第一行:

result = df[df['time'] > 0].sort_values('time').iloc[0]

这个方法逻辑直观,容易理解,但数据量很大时,nsmallest的性能会更优(因为不需要对全量数据排序)。

处理多行同最小值的情况

如果你的数据里有多个行的time是相同的最小非0值,想要保留所有这些行,可以先拿到最小的非0time值,再做筛选:

# 第一步:获取最小的非0time值
min_non_zero = df[df['time'] > 0]['time'].min()
# 第二步:筛选所有time等于该值的行
result = df[df['time'] == min_non_zero]

内容的提问来源于stack exchange,提问作者Geosphere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:05