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

如何基于复合键合并Pandas中的坐标DataFrame?

解决Pandas合并时的KeyError及长格式坐标合并问题

1. 修复KeyError问题

出现KeyError: 'Incident_Number'的核心原因是melt操作时丢失了Incident_Number列。默认情况下melt()会把所有未指定的列转为值列,必须通过id_vars参数明确保留Incident_Number作为标识列。

示例代码(修复melt步骤):

# 假设原始宽表为df_coords,包含Incident_Number、Latitude、Longitude列
df_coords_long = df_coords.melt(
    id_vars=['Incident_Number'],  # 必须指定,保留合并所需的键列
    var_name='Coord_Type',        # 可选,标记当前行是纬度还是经度(比如"Latitude"/"Longitude")
    value_name='GeoCodeCoordinates'  # 目标列名,对应需求
)

执行后用print(df_coords_long.columns)确认Incident_Number列存在。

另外需排查列名一致性:

  • 检查两个待合并表的Incident_Number列名是否完全一致(注意大小写、空格、特殊字符,比如Incident Number和Incident_Number是不同列)
  • 若列名不一致,用df.rename(columns={'原列名': 'Incident_Number'}, inplace=True)统一

2. 正确执行合并(支持NaN填充)

因两表记录数不等,需用**外连接(how='outer')**保留两边所有记录,缺失的GeoCodeCoordinates会自动填充NaN。

场景1:仅基于Incident_Number合并

如果目标是将长格式的坐标数据关联到主表的每个事件记录(每个事件会生成两行,分别对应纬度、经度):

# df_main是需添加GeoCodeCoordinates的目标表,需包含Incident_Number列
merged_df = pd.merge(
    df_main,
    df_coords_long,
    on='Incident_Number',
    how='outer'  # 外连接保留所有记录,缺失值填充NaN
)

场景2:基于Incident_Number+坐标类型的复合键合并

如果目标表也是长格式(按事件+坐标类型拆分),需用复合键确保纬度、经度精准匹配:

# 假设df_main_long包含Incident_Number和Coord_Type列
merged_df = pd.merge(
    df_main_long,
    df_coords_long,
    on=['Incident_Number', 'Coord_Type'],
    how='outer'
)

关键注意事项

  • 合并前确认两个表的键列无缺失值(若有缺失,可先用df.dropna(subset=['Incident_Number'])清理,或保留缺失值等待合并后填充)
  • 若需控制合并后的列顺序,可手动指定merged_df = merged_df[['Incident_Number', 'GeoCodeCoordinates', ...]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:46:30