如何按连续相同Layer值精简数据集并提取对应深度极值
连续同Layer分段合并实现方法
核心处理注意点:不能直接按全表BorID+Layer字段分组聚合,否则会把同一BorID下不连续的同Layer值记录错误合并,必须先识别同一BorID下、Layer取值连续相同的独立分段,再对每个分段做聚合计算。
方案1:Python + Pandas 实现(千行级数据处理效率高,推荐)
- 安装依赖库
pip install pandas - 编写处理代码,可直接适配csv、Excel等常见格式的数据集
import pandas as pd # 读取本地数据集,根据文件格式选择对应读取方法 df = pd.read_csv("你的数据集文件路径.csv") # Excel格式读取:df = pd.read_excel("你的数据集文件路径.xlsx") # 生成连续分段标记:按BorID分组,当前行Layer和上一行不同时,分段编号累加 df["block_flag"] = df.groupby("BorID")["Layer"].apply( lambda col: (col != col.shift()).cumsum() ).reset_index(drop=True) # 按BorID+分段标记分组聚合 merged_result = df.groupby(["BorID", "block_flag"], as_index=False).agg( Depth1=("Depth1", "min"), Depth2=("Depth2", "max"), Layer=("Layer", "first") ).drop(columns="block_flag") # 删除辅助用的分段标记列 # 导出处理完成的结果 merged_result.to_csv("合并后结果.csv", index=False) # Excel格式导出:merged_result.to_excel("合并后结果.xlsx", index=False) - 效果说明
你给出的示例数据中每条记录的Layer值和相邻记录均不重复,每个连续分段仅1条记录,处理后结果和原表一致;如果存在连续多条同Layer记录,例如某BorID下连续3条Layer为S的记录,Depth1/Depth2依次为0.1-0.5/0.5-1.1/1.1-1.6,会自动合并为单条记录:BorID不变,Depth1取最小值0.1,Depth2取最大值1.6,Layer为S。
方案2:Excel 操作实现(无需编写代码)
- 先对全表按BorID字段排序,确保同一个BorID的所有记录连续排列(原数据已按钻孔逐行排列可跳过此步)
- 新增辅助列命名为
连续标记,首行数据行(表头下第一行)的单元格填1,第二行数据开始输入公式:=IF(AND(A2=A1,D2=D1),E1,E1+1),其中A列为BorID列、D列为Layer列、E列为新建的连续标记列,公式下拉填充整列 - 选中全表,点击顶部菜单栏「数据」选项卡中的「分类汇总」功能,分类字段选择
连续标记,汇总项勾选Depth1的最小值、Depth2的最大值,确认后即可生成每个连续分段的聚合值,最后筛选汇总行、删除多余明细行即可得到最终结果。
内容的提问来源于stack exchange,提问作者Mikkel Astrup
相关产品推荐
相关产品推荐

