与熊猫外部合并时出现重复问题
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 来指定要更改的行和列以上是关于与熊猫外部合并时出现重复问题的主要内容,如果未能解决你的问题,请参考以下文章