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
相关产品推荐
相关产品推荐

