Я не совсем уверен, что это тот же результат, которого вы пытаетесь достичь, но, надеюсь, это отправная точка (я сомневаюсь, что вам нужно 4 для циклов):
import pandas as pd
import numpy as np
names_tab = pd.DataFrame({'header':['System1','System2','System3'], 'some_other_column':['foo','bar','foobar']})
sheet1 = pd.DataFrame({'System1':['x','X'], 'System2':['x','X'], 'System4':['X','x']})
sheet2 = pd.DataFrame({'System2':['X','x'], 'System8':['x','x'], 'System3':['x','X']})
sheets = [sheet1, sheet2]
for i, sheet in enumerate(sheets):
print("Sheet", i + 1)
common_columns = list(set(sheet.columns.tolist()).intersection(names_tab['header'].tolist()))
df = sheet[common_columns]
print("Here are all the 'x' values in Sheet", i + 1)
print(df.where(df == 'x'))
# To get your behavior
positions = np.where(df.values == 'x')
for idx, col in positions:
print('{} has x in row {} column {} on sheet {}'.format(df.columns[col], idx, col, str(i+1)))
Возможно, вы могли бы предоставить Минимальный, Полный и Проверяемый пример .