【发布时间】:2018-01-17 12:18:02
【问题描述】:
我有两个数据框:fpm 和 real。请参阅以下示例:
month fpm region_id
94934 11 3.106522e+07 5300108
94935 23 3.476453e+07 5300108
94936 35 4.480962e+07 5300108
94937 47 4.148533e+07 5300108
94938 59 4.324909e+07 5300108
94939 71 5.908792e+07 5300108
94940 83 6.218772e+07 5300108
94941 95 6.881312e+07 5300108
region_id month gdp_region
72397 5300108 35 5.390220e+10
72398 5300108 47 5.845612e+10
72399 5300108 59 6.707650e+10
72400 5300108 71 7.573268e+10
72401 5300108 83 8.466141e+10
72402 5300108 95 9.340400e+10
我想通过region_id和month合并它们。
为了做到这一点,我使用了命令:
j = pd.merge(real, fpm, how='outer', on=['region_id', 'month'], left_index='off', right_index='off')
发生的情况是,fpm 列中的一些外来值加入了region_id 5300108 的同一行,而实际的gdp_region 实际上并没有在正确的region_id 和month 处加入。
我检查过,两列都是同一类型:int
这是错误的结果。请注意,索引是不同的。我明确设置了index='off'。
region_id month gdp_region fpm
72397 5300108 35 5.390220e+10 1.649367e+07
72398 5300108 47 5.845612e+10 1.968157e+07
72399 5300108 59 6.707650e+10 2.088269e+07
72400 5300108 71 7.573268e+10 4.027545e+06
72401 5300108 83 8.466141e+10 1.197713e+06
72402 5300108 95 9.340400e+10 1.383501e+06
72403 5300108 107 1.102996e+11 1.718117e+06
72404 5300108 119 1.243238e+11 1.827867e+06
72405 5300108 131 1.441741e+11 2.053814e+06
72406 5300108 143 1.545690e+11 2.597804e+06
72407 5300108 155 1.641013e+11 2.908494e+06
72408 5300108 167 1.759067e+11 3.394452e+06
72409 5300108 179 1.974321e+11 4.022392e+06
94934 5300108 11 NaN 3.106522e+07
94935 5300108 23 NaN 3.476453e+07
94936 5300108 35 NaN 4.480962e+07
94937 5300108 47 NaN 4.148533e+07
94938 5300108 59 NaN 4.324909e+07
94939 5300108 71 NaN 5.908792e+07
94940 5300108 83 NaN 6.218772e+07
94941 5300108 95 NaN 6.881312e+07
感谢任何建议。 谢谢。
【问题讨论】:
-
pd.merge(real, fpm, how='left', on=['region_id', 'month']) -
如果我使用 how='left' 会丢失例如第 11 个月的 'fpm' 信息。
-
然后使用
how='right'