В панд, получить координаты (индекс и имя столбца) значений, которые удовлетворяют условию

#python #pandas #dataframe

#питон #панды #фрейм данных

Вопрос:

У меня есть фрейм данных с несколькими столбцами и строками, все значения каждого столбца являются числами. Я хочу посмотреть, какие ячейки удовлетворяют условию, а затем просмотреть их столбец, ключ и значение.

напр..

 a b x 1 3 y 2 2 z 3 1  

если условие x gt; 2, я хочу вернуть что-то вроде:

[(‘a’, ‘z’, 3), (‘b’, ‘x’, 3)]

На самом деле не имеет значения точный формат возврата. но я хочу каким-то образом получить эту информацию

Ответ №1:

Вы можете stack , предоставив вам мультииндекс, где первый уровень-это индекс, а второй уровень-столбцы, затем отфильтровать эту единственную серию. Здесь я rename указываю оси, чтобы получившийся ряд был немного более описательным.

 s = df.rename_axis(index='index', columns='col').stack().loc[lambda x: xgt;2] #index col #x b 3 #z a 3 #dtype: int64  

Если вы хотите, чтобы столбцы были первыми, а индекс вторым, то после stack вы можете связать их в цепочку .swaplevel(0,1) .

Если вы хотите получить какой-то другой контейнер, кортежи-это небольшая проблема, но вы можете довольно легко получить массив.

 s.reset_index().to_numpy() #array([['x', 'b', 3], # ['z', 'a', 3]], dtype=object)  

Комментарии:

1. Итерационные последовательности для получения кортежей?

2. @sammywemmy да, но, похоже, бесполезно использовать какую-либо медленную iter функцию, и поскольку формат не казался очень важным, я думаю, что массив будет простым