Используйте stack
для изменения формы, создания столбцов по MultiIndex
, фильтрации по query
и последнего преобразования в nested list
s:
c = df.stack().reset_index(name='val').query('val > 2').values.tolist()
print (c)
[[0, 'c', 3], [1, 'a', 4], [1, 'b', 5], [1, 'c', 6]]
Еще одно решение для лучшей производительности:
#create numpy array
arr = df.values
#create boolean mask
m = arr > 2
#get positions ot True values
a = np.where(m)
#filter values to 1d array by mask
b = arr.ravel()[m.ravel()]
#final list by indexinf columns and index values, map for convert nested tuples
c = list(map(list, zip(df.index[a[0]], df.columns[a[1]], b)))
print (c)
[[0, 'c', 3], [1, 'a', 4], [1, 'b', 5], [1, 'c', 6]]