如何在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
相关产品推荐
相关产品推荐

