Почему ваш текущий подход не работает :
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')