How about:
>>> s = df.stack()
>>> s[s % 3 == 0].index.tolist()
[('A', 'a'), ('B', 'c'), ('C', 'b')]
Step-by-step, first we stack:
>>> s = df.stack()
>>> s
A a 0
b 10
c 20
B a 1
b 11
c 21
C a 2
b 12
c 22
dtype: int64
Select:
>>> s % 3 == 0
A a True
b False
c False
B a False
b False
c True
C a False
b True
c False
dtype: bool
Use this to filter the series:
>>> s[s % 3 == 0]
A a 0
B c 21
C b 12
dtype: int64
Get the index:
>>> s[s % 3 == 0].index
MultiIndex(levels=[[u'A', u'B', u'C'], [u'a', u'b', u'c']],
labels=[[0, 1, 2], [0, 2, 1]])
And the values we're looking for:
>>> s[s % 3 == 0].index.tolist()
[('A', 'a'), ('B', 'c'), ('C', 'b')]