我试图找到三个数据帧的交集,但是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')
关于python - 两个或多个DataFrame列的交集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54114085/