基于x、y列组合筛选pandas中time值最小的行
按x、y分组获取time最小值对应行的解决方案
这问题我平时处理重复分组数据时经常碰到,用pandas可以轻松搞定,给你两种实用的方案,按需选择:
方案1:只保留每组第一个time最小的行
如果同一x、y组合下只有一个最小time值,或者你只需要每组的第一个最小值行,用这个方法最高效:
# 假设你的DataFrame名为df # 按x、y分组,获取每组time最小的行索引 min_time_idx = df.groupby(['x', 'y'])['time'].idxmin() # 根据索引提取目标行 result_df = df.loc[min_time_idx]
原理很简单:groupby(['x', 'y'])把数据按x和y的唯一组合拆分,['time'].idxmin()会返回每组中time值最小的那一行的原始索引,最后用loc就能精准提取这些行。
方案2:保留所有time为最小值的行
如果存在同一x、y组合下多个行的time值相同且都是该组最小值的情况,想要把这些行都保留下来,就用这个方法:
# 计算每个行所在组的最小time值,生成和原df同长度的列 group_min_time = df.groupby(['x', 'y'])['time'].transform('min') # 筛选出time等于对应组最小值的所有行 result_df = df[df['time'] == group_min_time]
这里transform('min')的作用是给每一行匹配它所在组的最小time值,之后我们只需要筛选出time等于这个值的行即可,所有符合条件的行都会被保留。
小提示
如果你的数据里有缺失值,建议先处理一下,避免影响分组计算:
# 移除x、y、time列中有缺失值的行 df_clean = df.dropna(subset=['x', 'y', 'time']) # 再用上面的方案处理clean后的df
内容的提问来源于stack exchange,提问作者Geosphere
相关产品推荐
相关产品推荐

