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

查询过滤pandas DataFrame的最快方法:批量获取ID对应末次记录值

优化解决方案

核心思路

抛弃逐行迭代的写法,改用pandas内置向量化操作实现,性能远高于自定义循环,同时写法更简洁健壮。

实现方案

方案1(简洁版,适用df_mass已按Time升序排列的场景)

# 按Unique_ID分组,直接取每组最后一条Mass记录
df_last_mass = df_mass.groupby('Unique_ID')['Mass'].last().reset_index(name='Final Mass')
# 左连接合并到df_summary,自动匹配Unique_ID
df_summary = df_summary.merge(df_last_mass, on='Unique_ID', how='left')

方案2(通用版,无需提前保证df_mass的时间排序)

# 先按Unique_ID+Time升序排序,再按Unique_ID去重,保留每组最后一条记录
df_last_mass = df_mass.sort_values(by=['Unique_ID', 'Time']) \
                      .drop_duplicates(subset='Unique_ID', keep='last') \
                      [['Unique_ID', 'Mass']] \
                      .rename(columns={'Mass': 'Final Mass'})
# 左连接合并到df_summary
df_summary = df_summary.merge(df_last_mass, on='Unique_ID', how='left')

方案优势

  • 性能提升显著:原循环写法时间复杂度为O(n*m)(n为df_summary的ID数量,m为df_mass的记录数),向量化操作底层为C实现,处理百万级数据时速度可提升百倍以上
  • 容错性更强:原写法如果遇到df_summary中存在无对应Mass记录的ID,会直接抛出list index out of range报错,左连接的写法会自动将这类ID的Final Mass填充为NaN,无需额外异常处理
  • 代码可读性更高,符合pandas的最佳实践规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:01