如何在Pandas中按多列合并两个DataFrame(lev列无匹配值)
解决DataFrame按多坐标列合并的需求
你需要使用**外连接(outer join)**基于全部四个坐标列(time, lat, lon, lev)进行合并,这样就能保留所有存在的坐标组合,同时自动为缺失的数值列填充NaN。
代码示例
首先构造你的两个DataFrame:
import pandas as pd df1 = pd.DataFrame({ 'time': [1], 'lat': [10], 'lon': [10], 'lev': [1], 'val1': [10] }) df2 = pd.DataFrame({ 'time': [1], 'lat': [10], 'lon': [10], 'lev': [2], 'val2': [20] })
执行合并:
df_total = pd.merge(df1, df2, on=['time', 'lat', 'lon', 'lev'], how='outer')
结果说明
合并后得到的df_total就是你想要的格式:
time lat lon lev val1 val2 0 1 10 10 1 10.0 NaN 1 1 10 10 2 NaN 20.0
问题原因解释
- 若使用默认的**内连接(how='inner')**合并四列,只有四个坐标完全匹配的行才会被保留,而你的两个DataFrame
lev值不同,因此结果为空。 - 若仅按
time,lat,lon三列合并,pandas会将两个lev列分别命名为lev_x和lev_y,并将两行数据合并为一行,不符合你的需求。
内容的提问来源于stack exchange,提问作者Billiam
相关产品推荐
相关产品推荐

