Я предлагаю изменить формат на MultiTndex Series
:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
A B C
0 8 8 3
1 7 7 0
2 4 2 5
a = df.stack()
print (a)
0 A 8
B 8
C 3
1 A 7
B 7
C 0
2 A 4
B 2
C 5
dtype: int32
b = a[a == 8].index.remove_unused_levels().tolist()
print (b)
[(0, 'A'), (0, 'B')]
РЕДАКТИРОВАТЬ:
Для повышения производительности возможно использовать numpy.where
для индексов совпадающих значений изатем zip
проиндексировал индекс и имена столбцов для кортежей:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
A B C
0 8 8 3
1 7 7 0
2 4 2 5
a = np.where(df == 8)
print (a)
(array([0, 0], dtype=int64), array([0, 1], dtype=int64))
b = list(zip(df.index[a[0]], df.columns[a[1]]))
print (b)
[(0, 'A'), (0, 'B')]