我有两个来自两个不同来源的pandas数据帧都包含构建地址,我想合并它们。我遇到的问题是地址在两组中的记录方式不完全相同。特别是街道的方向(' N' E',' S' W' W')。
一组中的某些地址有方向而有些区域没有方向,所以如果我将方向用作合并列,则一些匹配的地址不会合并在一起(例如' 123 Main St' in one and&# 39; 123 N Main St'在另一个)。有些建筑物除了方向外都有相同的地址(例如' 456 N Other Ave'和456 S Other Ave')所以我不想完全忽略这个方向,但是我想将街道的方向用作辅助合并列,仅在存在重复地址时使用,否则将被忽略。有没有办法做到这一点?
我合并的两列是full_add
和dir
,分别有'123 Main St'
和'N'
等条目。
以下是一个例子:
df1 = pd.DataFrame({
'full_add': ['123 Main St', '456 Other Ave', '456 Other Ave'],
'dir': ['N', 'N', 'S'],
'left_val': [100, 200, 300]
})
df2 = pd.DataFrame({
'full_add': ['123 Main St', '456 Other Ave', '456 Other Ave'],
'dir': [np.nan, 'N', 'S'],
'right_val': [1000, 2000, 3000]
})
merged = pd.DataFrame({
'full_add': ['123 Main St', '456 Other Ave', '456 Other Ave'],
'dir': ['N', 'N', 'S'],
'left_val': [100, 200, 300],
'right_val': [1000, 2000, 3000]
})
答案 0 :(得分:1)
这样做的一种方法就是加入" full_add"然后过滤掉那些你不想要的记录,比如不匹配的非匹配目录。
df_out = df1.merge(df2, on='full_add')
mask = ((df_out.dir_x.isnull()) | (df_out.dir_y.isnull()) | (df_out.dir_x == df_out.dir_y))
df_out[mask]
输出:
dir_x full_add left_val dir_y right_val
0 N 123 Main St 100 NaN 1000
1 N 456 Other Ave 200 N 2000
4 S 456 Other Ave 300 S 3000