当前位置: 首页 > 面试题库 >

两个或多个DataFrame列的交集

田向荣
2023-03-14
问题内容

我试图找到三个数据帧的交集,但是pd.intersect1d不喜欢使用三个数据帧。

import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('BCDE'))
df3 = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('CDEF'))

inclusive_list = np.intersect1d(df1.columns, df2.columns, df3.columns)

错误:

ValueError: The truth value of a Index is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

inclusive_list应只包括列名C&D.任何帮助,将不胜感激。谢谢。


问题答案:

为什么您当前的方法行不通

intersect1d不接受N数组,仅比较2。

numpy.intersect1d(ar1, ar2, assume_unique=False, return_indices=False)

从定义中可以看到,您将第三个数组作为assume_unique参数传递,并且由于您将数组视为单个布尔值,因此会收到ValueError

您可以使用以下方法扩展功能intersect1d以在N阵列上工作functools.reduce

from functools import reduce
reduce(np.intersect1d, (df1.columns, df2.columns, df3.columns))



array(['C', 'D'], dtype=object)

更好的方法

但是,最简单的方法是在Index对象上使用交集:

df1.columns & df2.columns & df3.columns



Index(['C', 'D'], dtype='object')


 类似资料:
  • 我需要根据其中一个列的条件交换多个列的值,并使用API而不是sparkQL 我有一个包含列 [A,B,C,X,Y,Z] 的数据帧,并且它具有具有以下模式的行: (1,2,3,空,空,空),< br> (3,3,3,空,空,空),< br >(空,空,空,5,3,2),< br> (3,1,1,空,空),< br >(空,空,空,3,4,1) 当任何行具有列A中的值为空的条件时,我想实现列组(a,

  • 问题内容: 我有两个排序集,并且想要进行交集,即。 关于效率,是否有比以下更好的方法: 问题答案: 您应该先使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。 其次,您将剩下2个剩菜。您可以重复使用同一辅助程序,以加快清除速度。 我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:

  • 问题内容: 这个问题已经在这里有了答案 : 从列表列表中删除重复项 (12个答案) 4年前关闭。 这是我的两个清单。 我的输出应为以下内容; 如何获得此输出? 先感谢您 问题答案: 您将必须将列表转换为元组列表,然后使用交集。请注意,下面的解决方案可能具有不同顺序的元素,并且由于我使用的是set,因此显然不会存在重复项。 您也可以将交叉点保存在变量中并获取最终列表,如果需要排序,则需要重复: 和交

  • 问题内容: 我正在使用python进行游戏,并且能够得到两个列表的交集: 现在,如果一个列表包含和并包含第三个元素,是否有一个内置函数来查找内部所有三个列表的交集?例如 那么结果应该是 问题答案: 对于2.4,您只需定义一个交集函数。 对于较新版本的python: 相交方法接受任意数量的参数 或者,您可以将第一个集合与其自身相交,以避免切片列表并进行复制: 我不太确定哪种方法会更有效,并且感觉这将

  • 问题内容: 我试图根据某些条件并执行一些步骤来找到两个列表。在学习阶段找不到方法:) 如您所见,逻辑很简单 根据某个过滤器从订单中获取所有项目,并与另一个过滤器相交并做一些事情。 问题答案: 最简单的方法是这样的:

  • 我是AMQP的新手,正在尝试为RabbitMQ系统制定一个通知架构。 我想要一个主题交换(通知交换,比方说),特别是因为我想灵活地使用主题交换附带的路由密钥和队列,以及将来扩展该主题的更多选项。不过,我可能是错的,因为... 我还想让两个或更多的消费者使用每个通知。作为基线,我希望发布的每个通知都在数据库中结束。此外,我希望每个通知都可以由客户端应用程序使用(例如,web应用程序使用并进一步通过套

  • 问题内容: 如何习惯地在多个DataFrame列上运行类似的函数,该函数期望一个列并返回多个列? 问题答案: 使用 pandas 0.19 ,您可以在一行中完成此操作: 指定在哪里进行一次热编码。

  • 我有一个无法解决的问题。我有一个包含TitleID、TextID、ImageID的新闻表。还有三张表格,标题,文本,图片。我想把它们都放在一个模型里。但当我尝试时,得到的结果就像数组中的数组。但我想要的是: 雄辩的ORM对此的反应如下: 数据库结构 新闻= 头衔= 其他表类似于标题表。