RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1561765
Accepted
Alexey Trukhanov
Alexey Trukhanov
Asked:2024-01-16 01:38:30 +0000 UTC2024-01-16 01:38:30 +0000 UTC 2024-01-16 01:38:30 +0000 UTC

pandas.merge 在与 how="inner" 参数合并时乘以相同的值

  • 772

同事们,在分析这个问题的时候,我遇到了一些pandas.merge我完全无法理解逻辑的行为。我将不胜感激我的同事们的解释。即使是一些文档的链接也足够了。

给定。

有两个数据框由一列组成,我们试图通过这一列合并它们。

import pandas as pd

dic = {'col':['1','2','3','4','5','6','7','8','9']}
dic_1 = {'col':['9','8','7','6','5','4','3','2','1']}
df_1 = pd.DataFrame.from_dict(dic)
df_2 = pd.DataFrame.from_dict(dic_1)
df_total = pd.merge(df_1, df_2, on='col', how='inner')
print(df_1)
print(df_2)
print(df_total)

如果至少一个数据帧中的值不重复,则一切都很好且符合逻辑

  col
0   1
1   2
2   3
3   4
4   5
5   6
6   7
7   8
8   9

但问题是这样的。

如果相同的值在两个数据帧中重复,则生成的数据帧将包含该值 m*n 次,其中 m 和 n 分别是第一个和第二个数据帧中该值的重复次数:

import pandas as pd

dic = {'col':['1','2','3','3','3','6','7','8','9']}
dic_1 = {'col':['9','8','7','6','5','3','3','2','1']}
df_1 = pd.DataFrame.from_dict(dic)
df_2 = pd.DataFrame.from_dict(dic_1)
df_total = pd.merge(df_1, df_2, on='col', how='inner')
print(df_1)
print(df_2)
print(df_total)

结果如下:

   col
0    1
1    2
2    3
3    3
4    3
5    3
6    3
7    3
8    6
9    7
10   8
11   9

所有结果都是凭经验获得的,我只能对逻辑做出假设。

我将不胜感激的解释。

python
  • 3 3 个回答
  • 35 Views

3 个回答

  • Voted
  1. Best Answer
    Алексей Р
    2024-01-16T02:14:24Z2024-01-16T02:14:24Z

    这种情况是多对多合并 - 左键和右键都是重复的以进行合并 - 并且与“内部”和“外部”、“左”和“右”相关。在这种情况下,合并的选择是什么?

    1. 取出左侧的一组钥匙,并将它们与右侧的一个钥匙相匹配。出现了不确定性——我应该按右边的哪个键?第一个、最后一个、随机或按顺序连接(第一个与第一个,第二个与第二个;...如果左侧有 3 个重复键,右侧有 7 个重复键?并且行的顺序不定)。这种方法不适合,因为它是不确定的。
    2. 取出左侧的一组钥匙,并将它们与右侧的每个钥匙相匹配。在这里,不确定性消失了——所有的键都将被检查和链接。

    这就是为什么它会这样工作,你只需要考虑到它。
    如果不发生这种“复制”对您来说至关重要,您可以使用validate指定有效合并选项的参数,例如“many_to_one” - 那么“many_to_many”选项将发生异常。好吧,或者在合并之前检查帧以确定键的唯一性。

    添加。信息。(英语)

    • 4
  2. Oopss
    2024-01-16T02:48:10Z2024-01-16T02:48:10Z

    可以添加一列标识符,一目了然在此输入图像描述

    dic = {'col':['a','a','b','b'],'zn':[1,2,3,4]}
    dic_1 = {'col':['a','a','a','b'],'zn':[10,20,30,40]}
    df_1 = pd.DataFrame.from_dict(dic)
    df_2 = pd.DataFrame.from_dict(dic_1)
    df_total = pd.merge(df_1, df_2, on='col', how='inner')
    print(df_1)
    print(df_2)
    print(df_total)
    
    • 3
  3. CrazyElf
    2024-01-16T02:20:40Z2024-01-16T02:20:40Z

    inside 与如何处理重复项无关,它是关于“将左侧的每个关键元素与右侧的每个关键元素进行匹配并打印这些元素匹配的行”。如果键重复,那么每个重复的键都会参与比较,因此是“复制”。如果您希望不存在重复项,请在合并之前或之后自行处理它们。

    • 2

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5