与熊猫外部合并时出现重复问题

Posted

技术标签:

【中文标题】与熊猫外部合并时出现重复问题【英文标题】:Duplication issues when outer-merging with pandas 【发布时间】:2021-12-27 08:36:21 【问题描述】:

我有一个关于复制和熊猫的问题。我有两个必须外连接的数据框,例如,给出了 df 1

id type value1
1 a 100
1 b 200

其中 id==1 包含具有不同值的两种类型,我想将其与另一个 df 结合,

id value2 value3
1 50 300

我正在将两者合并使用

df_merged = df1.merge(df2,how='outer',on='id')

结果是

id type value1 value2 value3
1 a 100 50 300
1 b 200 50 300

很明显 value2 和 value3 重复,如果我例如想要对 value2 或 value3 求和。有什么方法可以合并和创建例如

id type value1 value2 value3
1 a 100 50 300
1 b 200 NaN NaN

或其他某种类型的方法?

谢谢!

【问题讨论】:

这就是连接的设计方式。在更大的范围内,您想要实现什么?为什么需要这个特定的连接? 如果 df1 中的 2 行严格相同,会发生什么?相同的 id、type 和 value1。 进行统计 - 这些值是敏感的税务数据。我不想重复计算税收元素。 什么你不想数两次?首先按某个列分组然后加入不是更有意义吗? 如果 df1 中的值相同,它应该保留两个值,因为类型不同。如果 df1 只有一种类型,则只有 1 列,因此没有问题。我只是不想在合并时复制“其他”值。 【参考方案1】:

您可以按照您的描述合并,然后使用:

df_merged.loc[df_merged.duplicated(subset=[dupe_cols]), [dupe_cols]] = np.nan

【讨论】:

嗯,df_merged[df_merged.duplicated(subset=["value2","value3"])] = np.nan 将整个第 2 行返回为 NaN。 已编辑答案 :) 我使用 .loc 来指定要更改的行和列

以上是关于与熊猫外部合并时出现重复问题的主要内容,如果未能解决你的问题,请参考以下文章

具有两个以上数据框的熊猫的外部合并[重复]

在python 2.7中导入熊猫时出现“ValueError:未知语言环境:UTF-8” [重复]

合并 Firestore 查询时出现重复数据

合并一个值在另外两个之间的熊猫数据框[重复]

使用熊猫数据框时出现 KeyError

OWB:将外部数据库与 JDBC 集成时出现问题