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

基于FARM与SHED字段合并农场数据集多行记录的实现方案

农场数据集按FARM、SHED维度合并清洗方案

清洗逻辑拆解

严格匹配业务规则,所有操作以分组为边界避免跨数据串值:

  • 分组基准:以FARM(农场)、SHED(棚舍编号)作为联合唯一键,所有填充、合并操作仅在同一联合键对应的行组内执行
  • 饲料类字段处理:对Feed total(总喂料量)、Feed per bird(单只禽喂料量)两列,在每个分组内执行有效值向上填充,将组内靠后行的非空值填充到组内上方同列的空位置
  • 平均体重字段处理:遍历所有平均体重类字段,从列名中提取对应的棚舍编号(例如从Average weight 1A提取编号1、从Average weight 2A提取编号2),将该列的有效值匹配填充到同组内SHED值与提取编号一致的行中
  • 冗余行清理:所有字段填充完成后,按FARM、SHED联合键去重,仅保留填充完成的完整行,删除组内其余残缺行

Pandas 可直接运行实现代码

import pandas as pd

# 1. 读取原始数据集,替换为实际文件路径即可
df = pd.read_excel("your_farm_dataset.xlsx")

# 2. 按FARM、SHED分组,向上填充饲料类字段
feed_cols = ["Feed total", "Feed per bird"]
df[feed_cols] = df.groupby(["FARM", "SHED"])[feed_cols].ffill()

# 3. 按棚舍编号匹配填充平均体重类字段
weight_cols = [col for col in df.columns if col.startswith("Average weight")]
for col in weight_cols:
    # 从列名提取对应棚舍编号
    shed_num = int(col.split(" ")[2][0])
    # 取当前体重列的有效值
    valid_val = df[col].dropna().iloc[0]
    # 匹配所属农场的对应棚舍行填充
    target_farm = df[df[col].notna()]["FARM"].iloc[0]
    df.loc[(df["FARM"] == target_farm) & (df["SHED"] == shed_num), col] = valid_val

# 4. 按联合键去重,保留第一条填充完成的完整记录
df_clean = df.drop_duplicates(subset=["FARM", "SHED"], keep="first").reset_index(drop=True)

# 5. 导出清洗完成的数据集
df_clean.to_excel("cleaned_farm_dataset.xlsx", index=False)

结果校验标准

清洗完成后可按以下规则核验结果正确性:

  • 每个FARM+SHED联合键仅对应1条记录,无重复、无业务字段缺失
  • 饲料类字段值与原始数据中同组的有效值完全一致,无错配
  • 平均体重字段与棚舍编号一一对应,无跨棚舍填充错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:54:18