求助:按故障编号最新检查日期分组并排序数据集行
实现思路与具体方案
要实现你描述的排序规则,核心是先确定每个故障编号(FaultNumber)组的最新检查日期,以此作为分组的排序依据,再在组内按检查日期倒序排列。具体分两步执行:
核心逻辑拆解
- 第一步:为每个FaultNumber计算组内的最新检查日期(即该组所有记录中InspectionDate的最大值),这个值将作为分组排序的优先级键。
- 第二步:先按「组内最新检查日期」倒序排列,确保最新出现的故障组排在前面;再按FaultNumber分组(保证同组记录聚合在一起);最后在组内按InspectionDate倒序排列。
不同工具的具体实现
1. SQL 实现
利用窗口函数MAX() OVER (PARTITION BY ...)直接计算每个组的最新日期,再基于该字段排序:
SELECT InspectionId, InspectionDate, FaultNumber, Comment FROM your_table ORDER BY -- 按组内最新检查日期倒序,确定分组顺序 MAX(InspectionDate) OVER (PARTITION BY FaultNumber) DESC, -- 确保同组记录排在一起 FaultNumber, -- 组内按检查日期倒序 InspectionDate DESC;
2. Pandas(Python)实现
先通过分组计算每个FaultNumber的最新日期,合并到原数据集后再排序:
import pandas as pd # 读取原始数据集 df = pd.read_csv("your_data.csv") # 计算每个FaultNumber的最新检查日期 group_max_dates = df.groupby("FaultNumber")["InspectionDate"].max().reset_index() group_max_dates.rename(columns={"InspectionDate": "GroupLatestDate"}, inplace=True) # 合并回原数据集 df_merged = pd.merge(df, group_max_dates, on="FaultNumber") # 按规则排序 sorted_df = df_merged.sort_values( by=["GroupLatestDate", "InspectionDate"], ascending=[False, False] ).drop(columns=["GroupLatestDate"]) # 输出结果 print(sorted_df)
3. Excel 实现
如果用Excel处理,可通过辅助列实现:
- 新增辅助列(比如D列),输入公式
=MAX(IF($C$2:$C$N=C2,$B$2:$B$N,""))(按Ctrl+Shift+Enter作为数组公式输入,N为数据最后一行行号),计算每个FaultNumber对应的最新检查日期。 - 选中所有数据,按「辅助列(降序)→ FaultNumber(升序/降序不影响,只要同组聚合)→ InspectionDate(降序)」的优先级排序。
内容的提问来源于stack exchange,提问作者BuckBuchanan
相关产品推荐
相关产品推荐

