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

Python中多列合并并填充NaN值的实现方法

解决方案

你可以通过透视df1为宽格式,再将其数据更新到df2对应列的方式实现需求,具体步骤如下:

步骤1:统一列名格式(避免大小写不匹配)

df1里的EVENT_TYPE值是首字母大写(如Tornado),而df2的列名是全大写(如TORNADO),先把df1的事件类型转成全大写,保证后续匹配:

df1['EVENT_TYPE'] = df1['EVENT_TYPE'].str.upper()

步骤2:将df1从长格式转为宽格式

用pivot方法把df1转成和df2结构一致的宽表,以STATE和YEAR为索引,事件类型为列,DAMAGE为对应值:

pivoted_df1 = df1.pivot(index=['STATE', 'YEAR'], columns='EVENT_TYPE', values='DAMAGE')

步骤3:将透视后的数据更新到df2中

先把df2的索引设为STATE和YEAR,用update方法把pivoted_df1的数值填充到df2对应的列,最后重置索引恢复原结构:

# 设置df2的索引
df2 = df2.set_index(['STATE', 'YEAR'])
# 用透视后的数据更新df2
df2.update(pivoted_df1)
# 重置索引
df2 = df2.reset_index()

执行完以上步骤后,df2就会变成你想要的最终输出:

STATE      YEAR       TORNADO      THUNDERSTORM      FLOOD   
  ALABAMA    1962       27           NaN              7
  ALABAMA    1963       NaN          12               NaN
...

补充说明:如果df1里存在同一STATE+YEAR+EVENT_TYPE的重复数据,建议用pivot_table并指定聚合函数(比如sum)来处理,避免透视报错:

pivoted_df1 = df1.pivot_table(index=['STATE', 'YEAR'], columns='EVENT_TYPE', values='DAMAGE', aggfunc='sum')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:20:58