pd.Series.duplicated
Поскольку вы используете Pandas, вы можете использовать pd.Series.duplicated
после объединения имен столбцов:
# concatenate column labels
s = pd.concat([df.columns.to_series() for df in (df1, df2, df3)])
# keep all duplicates only, then extract unique names
res = s[s.duplicated(keep=False)].unique()
print(res)
array(['b', 'e'], dtype=object)
pd.Series.value_counts
В качестве альтернативы, вы можете извлечь серию отсчетов и идентифицировать строки с числом, превышающим 1:
s = pd.concat([df.columns.to_series() for df in (df1, df2, df3)]).value_counts()
res = s[s > 1].index
print(res)
Index(['e', 'b'], dtype='object')
collections.Counter
Классическим решением Python является использование collections.Counter
с последующим пониманием списка. Напомним, что list(df)
возвращает столбцы в кадре данных, поэтому мы можем использовать эти map
и itertools.chain
, чтобы создать итерацию для подачи Counter
.
from itertools import chain
from collections import Counter
c = Counter(chain.from_iterable(map(list, (df1, df2, df3))))
res = [k for k, v in c.items() if v > 1]