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

如何在Pandas中保留同一船只连续部件安装的最早记录?

解决连续船只部件批次的首次记录提取问题

这个需求核心是要识别连续的同船只+部件批次,而不是简单把所有同船只+部件的记录归为一组。咱们用Pandas一步步实现:

步骤1:确保日期列是可排序的日期类型

首先得把date列转换成datetime格式,这样才能保证时间顺序的正确性:

import pandas as pd

# 假设你的原始数据存储在df中
df['date'] = pd.to_datetime(df['date'], format='%m/%d')

步骤2:按船只和日期排序

为了保证记录是严格按时间顺序排列的,先对DataFrame进行排序:

df = df.sort_values(['boat', 'date'])

步骤3:生成连续批次的分组标识

这是最关键的一步——我们需要给每一段连续的同船只+部件记录分配一个唯一的组ID:

# 当当前行的船只或部件与上一行不同时,标记为新组,并用累加生成组ID
df['group_id'] = (df[['boat', 'part']] != df[['boat', 'part']].shift()).any(axis=1).cumsum()

简单解释下:

  • shift()会把上一行的boat和part值移到当前行位置
  • 比较当前行和上一行的boat/part,只要有一个不同就返回True
  • cumsum()会把这些True(等价于1)累加,这样每遇到新的批次,组ID就会递增

步骤4:提取每个批次的第一条记录

最后按组ID分组,取每组的第一条记录,再去掉临时的group_id列:

# 分组取首条,重置索引
result = df.groupby('group_id').first().reset_index(drop=True)

验证结果

运行完上面的代码后,result就会和你期望的输出完全一致:

dateboatpart
2023-01-01AC
2023-01-04AD
2023-01-06AC
2023-01-09BC

(注:如果你的原始数据包含年份,记得在pd.to_datetime里调整格式,比如%Y/%m/%d)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:15:01