Найти все индексы строк и столбцов в датафрейме по условию - PullRequest
0 голосов
/ 11 июня 2018

Предположим, у меня есть фрейм данных с числовыми значениями.

как найти все индексы ("строка" + "столбец" + "значение") ячеек выше \ ниже определенного порога?

Например:

df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a', 'b', 'c'])

и мой порог равен 2, я хотел бы получить:

[[0,c,3],[1,a,4][1,b,5],[1,c,6]]

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы можете использовать:

df[df.gt(2)].stack().reset_index().values.tolist()

Выход:

[[0, 'c', 3.0], [1, 'a', 4.0], [1, 'b', 5.0], [1, 'c', 6.0]]
0 голосов
/ 11 июня 2018

Используйте 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...