剖面水稳.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import pandas as pd
  2. import numpy as np
  3. df_1 = pd.read_excel(r"D:\guozhong\19、定远县\19、定远县\定远县剖面数据统计20241222.xlsx",converters={'原样品编号': str})
  4. df_1
  5. df_2 = pd.read_excel(r"D:\guozhong\19、定远县\19、定远县\定远县水稳清除后汇总20241222.xlsx",converters={'原样品编号': str})
  6. df_2
  7. # 确保列为字符串类型
  8. df_1["原样品编号"] = df_1["原样品编号"].astype(str)
  9. df_2["样品编号"] = df_2["原样品编号"].astype(str)
  10. # 创建一个布尔掩码,标记尾号为1的行
  11. mask = df_1["原样品编号"].str.endswith("1")
  12. # 将未满足条件的行清空(填充为NaN),保留满足条件的行原位置不变
  13. df_1.loc[~mask, :] = np.nan
  14. # 提取前16位进行匹配
  15. df_1["原样品编号前16位"] = df_1["原样品编号"].str[:16]
  16. df_2["样品编号前16位"] = df_2["样品编号"].str[:16]
  17. # 合并表格(左连接,保留df_1中的所有数据)
  18. merged_df = pd.merge(
  19. df_1,
  20. df_2[["样品编号前16位", "水稳>5mm(%)", "水稳3mm~5mm(%)", "水稳2mm~3mm(%)", "水稳1mm~2mm(%)", "水稳0.5mm~1mm(%)", "水稳0.25mm~0.5mm(%)", "水稳性大团聚体总和(%)"]],
  21. left_on="原样品编号前16位",
  22. right_on="样品编号前16位",
  23. how="left"
  24. )
  25. # 删除辅助列
  26. merged_df = merged_df.drop(columns=["原样品编号前16位", "样品编号前16位"])
  27. # 输出结果
  28. print(merged_df)
  29. merged_df.to_excel(r"定远剖面水稳.xlsx", index=False, engine="openpyxl")