我有一个我一直在清理和清理的数据集我需要把它放到一个数据透视表中来总结一些数据。我现在把它放回到数据帧中,以便我可以将它与其他一些数据帧合并。 df1看起来像这样:
Count Region Period ACV PRJ
167 REMAINING US WEST 3/3/2018 5 57
168 REMAINING US WEST 3/31/2018 10 83
169 SAN FRANCISCO 1/13/2018 99 76
170 SAN FRANCISCO 1/20/2018 34 21
df2看起来像这样:
Count MKTcode Region
11 RSMR0 REMAINING US SOUTH
12 RWMR0 REMAINING US WEST
13 SFR00 SAN FRANCISCO
我尝试将它们与此代码合并:
df3 = pd.merge(df1, df2, on='Region', how='inner')
但由于某种原因,pandas没有将Region列解释为相同的数据,并且合并在MKTcode列中调出NaN数据,它似乎将df2附加到df1,如下所示:
Count Region Period ACV PRJ MKTcode
193 WASHINGTON, D.C. 3/3/2018 36 38 NaN
194 WASHINGTON, D.C. 3/31/2018 12 3 NaN
195 ATLANTA NaN NaN NaN ATMR0
196 BOSTON NaN NaN NaN B2MRN
我尝试过内部和外部联接,但真正的问题似乎是pandas将每个数据帧的Region列解释为不同的元素。 df2中的MKTcode列和Region列只有12个观察值,每个观察值只发生一次,而df1在Region列中有几个重复的实例(同一个城市的倍数)。有没有办法我可以创建我需要的12个MKT代码列表并执行合并,它与我指定的每个区域匹配?喜欢一对多比赛?
感谢。
答案 0 :(得分:1)
当合并未按预期工作时,首先要做的是查看有问题的列。
在大多数情况下,最大的罪魁祸首是尾随/引导空格,通常是因为DataFrame如何被读入内存而引入。
尝试删除额外的空格字符:
df1['Region'] = df1['Region'].str.strip()
df2['Region'] = df2['Region'].str.strip()
现在,
pd.merge(df1, df2, on='Region', how='inner')
Count_x Region Period ACV PRJ Count_y MKTcode
0 167 REMAINING US WEST 3/3/2018 5 57 12 RWMR0
1 168 REMAINING US WEST 3/31/2018 10 83 12 RWMR0
2 169 SAN FRANCISCO 1/13/2018 99 76 13 SFR00
3 170 SAN FRANCISCO 1/20/2018 34 21 13 SFR00
如果您仍在使用NaN,可能是因为字之间的空白字符存在差异。例如;
'REMAINING US WEST' != 'REMAINING US WEST'
在这种情况下,请替换它们:
df1['Region'] = df1['Region'].str.replace(r'\s+', ' ')
df2['Region'] = df2['Region'].str.replace(r'\s+', ' ')