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

基于Año_Comunidad匹配,用另一DataFrame填充目标DataFrame空值

基于Año_Comunidad匹配填充DataFrame空值的正确方法

你的问题核心是没有通过Año_Comunidad这个匹配键将两个DataFrame的行对应起来,导致之前的填充代码完全无法生效。以下是两种可行的解决方案:

方案一:通过合并(merge)实现填充

这种方法先将两个表基于匹配键合并,再用合并后的对应列填充空值:

# 从analisis2中提取需要的匹配键和填充列,确保每个Año_Comunidad只保留一条数据
fill_source = analisis2[['Año_Comunidad', 'Super_95', 'Diesel', 'Salario en euros anuales']].drop_duplicates('Año_Comunidad')

# 左连接analisis和填充源表
merged_df = analisis.merge(fill_source, on='Año_Comunidad', how='left', suffixes=('', '_fill'))

# 逐列填充空值
analisis['Super_95'] = merged_df['Super_95'].fillna(merged_df['Super_95_fill'])
analisis['Diesel'] = merged_df['Diesel'].fillna(merged_df['Diesel_fill'])
analisis['Salario en euros anuales'] = merged_df['Salario en euros anuales'].fillna(merged_df['Salario en euros anuales_fill'])

# 若需要填充Comunidad列,同理操作
# analisis['Comunidad'] = merged_df['Comunidad'].fillna(merged_df['Comunidad_fill'])

方案二:利用字典映射快速填充

通过匹配键创建映射字典,直接用map方法匹配填充:

# 为每个需要填充的列创建{Año_Comunidad: 对应值}的字典
super95_mapping = analisis2.set_index('Año_Comunidad')['Super_95'].to_dict()
diesel_mapping = analisis2.set_index('Año_Comunidad')['Diesel'].to_dict()
salario_mapping = analisis2.set_index('Año_Comunidad')['Salario en euros anuales'].to_dict()

# 仅填充原表中的空值
analisis['Super_95'] = analisis['Super_95'].fillna(analisis['Año_Comunidad'].map(super95_mapping))
analisis['Diesel'] = analisis['Diesel'].fillna(analisis['Año_Comunidad'].map(diesel_mapping))
analisis['Salario en euros anuales'] = analisis['Salario en euros anuales'].fillna(analisis['Año_Comunidad'].map(salario_mapping))

你之前代码的错误原因

你之前的代码逻辑完全偏离需求:

  • 没有基于Año_Comunidad将两个表的行关联,只是单独处理analisis2['Super_95']列;
  • 错误地将Super_95的数值与字符串'2020Islas Baleares'做比较,这显然不是匹配键的内容,最终只能填充这个固定字符串或NaN,根本无法对应到正确的行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:15:21