python - Panda的左合并: resulting table has more rows,防止重复

标签 python pandas merge

我有 2 个数据框。 df1 有 39780 行,df2 有 8900454 行

我想要合并的 df1 列: ['邮政编码','门牌号','后缀'] “后缀”列包含一些 NAN。

df2 列:

['postalcode_right','housenumber_right', 'suffix_right', 'index_right']

(名为“index_right”的列不是该数据帧的索引。)

df2 = pd.merge(df1, df2,  how='left', left_on=['postalcode','housenumber', 'suffix'], right_on = ['postalcode_right','housenumber_right', 'suffix_right'])

因为df1.suffix包含NAN,右侧的一些行与左侧的多行匹配。

如何防止这种情况或清除多次匹配的行的“index_right”值?

最佳答案

您不应该考虑按空值进行分组。其一,从分析的角度来看,这没有多大意义。

您可以将 NA 值转换为填充字符串,例如'NULL':

left_cols = ['postalcode', 'housenumber', 'suffix']
right_cols = ['postalcode_right', 'housenumber_right', 'suffix_right']]

df1[left_cols] = df1[left_cols].fillna('NULL')
df2[right_cols] = df2[right_cols].fillna('NULL')

然后在合并之前删除数据框中的重复项:

res = pd.merge(df1, df2.drop_duplicates(subset=right_cols), 
               how='left', left_on=left_cols, right_on=right_cols)

这将确保 resdf1 具有相同的行数。

关于python - Panda的左合并: resulting table has more rows,防止重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076172/

相关文章:

git - 如何让git在 merge 时忽略目录

python - 在 csv 文件中写入字符串时,如何避免重复字符串?

python - 在目录列表 Python 中打印最终(叶?)节点

python - 如何使用 PRAW 获取上周的评论?

python - 按新的日期范围重新索引数据框

python - 一旦达到特定值,就删除高于特定值的行

r - 使用合并将 2 列合并为 1 列时出现问题

python - 游戏设计 - 处理奖金/鸭子类型(duck typing) - python

python - 使用 .loc 和多个条件从 DataFrame 中选择行,然后显示与一列的最小值/最大值对应的行

git - 查找在 git merge commit 期间冲突或本地编辑的文件