当前位置: 首页 > 知识库问答 >
问题:

使用多个键(“AND”或“or”?)合并数据帧

许寒
2023-03-14

我需要合并两个数据帧。为了确保行是唯一的,我需要在合并之前验证“Name”和“Age”是否匹配。我将组合用作主键。这是我的密码:

df=pd.merge(df,df1[['Name','Age','Date']],左上=['Name','Age'],右上=['Name','Age'],how='left')

当我使用多个键(“姓名”和“年龄”)时,这是一个“和”或“或”匹配。我只希望它在“Name”和“Age”匹配时合并,而不是只在“Name”或“Age”匹配时合并。我似乎在文档中找不到这一点,我得到了一些混合的结果。

更新:由于数据原因,我确实需要进行左连接。右边的表是我需要的数据的子集,而我需要将所有数据保留在左边。关键概念是只从右侧合并与“姓名”和“年龄”匹配的数据

共有1个答案

魏勇军
2023-03-14

我做了一些测试。答案是多个键上的合并是一个“AND”函数,而不是“OR”。

以下是我做的测试:

DF1=:

A   B   D
----------
a   m   1
b   n   2
c   o   3
d   q   4
e   r   5
f   s   6
g   t   7
h   u   8
i   v   9

DF2=:

Q   R   S
-----------
a   m   abc
x   n   def
c   x   hij
d   q   klm
x   r   nop
f   x   qrs
g   t   tuv
x   u   wxy
i   x   zab

(将字母替换为“x”,使其不匹配。)

运行此合并:

df_merged = pd.merge(df1, df2[['Q', 'R', 'S']], left_on=['A', 'B'], right_on=['Q', 'R'], how='left')

返回此输出:

A  B  D    Q    R    S
--------------------------
a  m  1    a    m  abc
b  n  2  NaN  NaN  NaN
c  o  3  NaN  NaN  NaN
d  q  4    d    q  klm
e  r  5  NaN  NaN  NaN
f  s  6  NaN  NaN  NaN
g  t  7    g    t  tuv
h  u  8  NaN  NaN  NaN
i  v  9  NaN  NaN  NaN

只有当两个键都匹配时,信息才会从右侧包含。特别是当A==Q和B==R时。

希望这能帮助到别人。

 类似资料:
  • 问题内容: 我整个上午都在搜索,但是大多数合并示例仅基于一个键,而在多个键上却找不到任何东西。 pid = 111,sid = 6,eid = 123的值在x和y中都匹配,然后合并为一条记录。如果它们不匹配,只需将其原样带过来。 我想要的最终结果: 问题答案: 这是从元组中重新锁定:

  • 问题内容: 我有一个关于数据库体系结构的问题。 我们正在建立一个CMS。许多字段将具有预填充的选择。例如,客户的信用状态可以为“良好”,“不良”,“未知”或“存款”。该项目的规格是这些预先填充的选择是动态的,管理员可以通过后端添加新值。所以我需要将这些值存储在数据库中。 我正在努力在两种方法之间做出决定 1)为每种清单都有一张桌子。示例将是诸如list_CrediStatus,list_Branc

  • 我有不同的数据帧,需要根据日期列将它们合并在一起。如果我只有两个数据帧,我可以使用,要使用三个数据帧,我可以使用,但是使用多个数据帧会变得非常复杂和不可读。 所有数据帧都有一个公共列-,但它们的行数和列数都不相同,我只需要其中每个日期对每个数据帧都是公共的行。 所以,我试图编写一个递归函数,返回一个包含所有数据的数据帧,但它不起作用。那么我应该如何合并多个数据帧呢? 我尝试了不同的方法,得到了一些

  • 我在一个项目中使用全文搜索。我想搜索多个单词,但我有一个问题。所以我的查询是; 这个查询是包括word1或word2或word3或word4的搜索,但我想搜索包括word1或word2或word3 word4的搜索 那么解决方案是什么呢?

  • 我的selenium代码通过等待网站标题更改来检查完成的子例程,该子例程运行良好。代码如下所示: 但是,这有时可能会失败,因为站点的登录页面在手动网站访问后发生变化。服务器会记住您离开的位置。这迫使我检查另一个条件(网站标题="notestring2)。 以下是我到目前为止所想到的(据我所知也有效): 这些条件中的任何一个始终为真。我不知道你是哪一个。 有没有什么方法可以在这些等待中包含一个“或”

  • 问题内容: 给定此选择器: 它将匹配一个正文,该正文的类包含 page-node-add- 的子字符串,而类恰好是 page-node-edit 我想说匹配第一个或第二个(但不能同时匹配)。可能吗? 使用逗号的问题: 如果我有一个长选择器,例如: 我原本以为CSS3可以解决这个问题,但是我想到的是: 谢谢 问题答案: 您需要使用逗号将它们分开: 使用逗号的问题: …是除了逗号以外,您无法做其他任何