#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
функцию, и поскольку формат не казался очень важным, я думаю, что массив будет простым