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

Pandas循环一个数据帧,并将所有行与其他DF行进行比较,并赋值

裴建华
2023-03-14

我有两个理由:

df1 = pd.DataFrame({'A':[3, 2, 5, 1, 6], 'B': [4, 6, 5, 8, 2], 'C': [4, 8, 3, 8, 0], 'D':[1, 4, 2, 8, 7], 'zebra': [5, 7, 2, 4, 8]})
df2 = pd.DataFrame({'B': [7, 3, 5, 1, 8], 'D':[4, 5, 8, 2, 3] })


print(df1)
print(df2)

   A  B  C  D    zebra
0  3  4  4  1      5
1  2  8  8  5      7
2  5  5  3  2      2
3  1  6  8  5      4
4  6  2  0  7      8
   B  D
0  7  4
1  3  5
2  5  8
3  8  5
4  8  3

这是一个简单的例子,在实际的df1中1000k行和10列,df2只有24行和更少的列。我想循环df2中的所有行,并比较那些特定的行(例如列'B'和'D')从df2在df1中具有相同的列名,如果行值匹配(如果列B中的值和df2中的列D中的值匹配相同的值在相同的列中,但在df1中)将该行中的相应斑马值分配给df2中的同一行,创建新的列斑马并分配该值。如果没有找到匹配分配0或NaN的。

   B  D  zebra
0  7  4  nan
1  3  5  nan
2  5  8  nan
3  8  5  7
4  8  3  nan

例如,df2中只有行索引3将值'B': 8和'D': 5与df1中索引2的行匹配(注意:行索引在比较中不应该很重要),并将相应的行值7从列'zebra'分配到df2。

共有1个答案

上官和惬
2023-03-14

合并就行了

df2.merge(df1[['B', 'D', 'zebra']], on = ['B', 'D'], how = 'left')

    B   D   zebra
0   7   4   NaN
1   3   5   NaN
2   5   8   NaN
3   8   5   7.0
4   8   3   NaN
 类似资料:
  • 我有两个数据帧,希望比较它们并返回第一个数据帧(df1)中不在第二个数据帧(df2)中的行。我找到了一种比较它们并返回差异的方法,但无法找出如何只返回df1中缺失的部分。

  • 问题内容: 如何检查数据库中是否存在Blob的重复项。我的数据库中有文档表,但是我不确定如何检查其中一个是否重复。我知道您应该使用dbms_lob.compare函数,但是在阅读了有关该主题的一些线程和文章之后,我仍然不明白这一点。 Documents表具有document_id列和data(blob)列。如何检查document_id = 1是否重复? 问题答案: “如果dbms_lob.com

  • 我有一个Numpy数组如下: 并希望使用np.greater将每行中的“向量”与其他行进行比较,以便: 但是如果我尝试它会将中的每个数字与中的每个其他数字进行比较,因此: 如何使外部比较行明智而不是元素明智?

  • 问题内容: 我想知道是否存在以下有效用例: 接受类型为where 的集合似乎是一种常见的模式(请参见Collections中的许多示例)。 但是,与基类进行比较时,在技术上似乎无法履行合同,因为无法确保另一类不会通过矛盾的比较来扩展基数。考虑以下示例: 我们有两个类,它们使用不遵循共同规则的比较进行扩展(如果存在共同规则,则几乎可以肯定在中实现)。但是,下面的破碎类将被编译: 只接受不安全吗?还是

  • 请原谅我在这里缺乏理解,因为我已经进入了三天的冬眠期。 我正在尝试在一个实体上添加验证,这需要将它们与另一个实体进行比较。 例如,以一个人为例。一个人可以有许多身体部位,但最多有两个手臂类型的身体部位(变异除外)。为了验证这一点,在插入新的车身部件时,我需要将其与给定人员的其他车身部件进行比较,并验证该类型的最大值是否已经达到。 我一直在研究Hibernate提供的约束/验证内容,但似乎没有一个涵

  • 问题内容: 我需要比较两个缓冲图像,看它们是否完全相同。只是说那等于是行不通的。我目前的方法是 但这并不能真正起作用。还有什么其他更可靠的方法? 问题答案: 显而易见的解决方案是逐像素比较它们是否相同。