2015-09-20 2 views
0

Это часть или часть моей попытки захватить значения из df. То, что я хотел бы сделать, это получить значения, когда первая часть условия имеет значение true, а если нет, возьмите значения из второй части условия. Похоже, что это не происходит, поскольку порядок, похоже, не влияет на изменения моего df.поведение или условие в boolean indexing pandas

(df[colA] == row[colA]-1) | (df[colA] == row[colA]-2) 

Что на самом деле происходит и есть способ получить информацию, которую я хочу?

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

A B 
1 x 
2 y 
3 z 
5 aa 
6 bb 

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

а.), Как это определить, будет ли значения быть из одного или двух рядов перемещенных

б.), Как писать код, так что я могу по умолчанию один, когда истинны и идти только два ряда, когда один не является истинным

values=df_bkp[(df_bkp['B']==row['B'])&((df_bkp['A']==row['A']-1)|(df_bkp['A']==row['A']-2))][col].values 

Я понимаю, где значения приходят от того, когда я делаю это:

values=df_bkp[(df_bkp['B']==row['B'])&(df_bkp['A']==row['A']-1)][col].values 
+0

Можете ли вы, пожалуйста, указать пример ввода и вывода? Трудно точно сказать, как это должно выглядеть. – Marius

+0

У вас уже есть b): 'False или True' равно' True', 'True или False' равно' True' – hellpanderrr

+0

@hellpanderrr - вы подразумеваете, что моя первая формула значений должна давать мне разные результаты в зависимости от того, на какой стороне я размещаю условия в заявлении или в заявлении? я получаю то же самое независимо от порядка: значения из строк, которые на 2 меньше, даже если есть значение из строки, которая меньше одной – user2891518

ответ

-2

Я считаю, что вы можете использовать неправильный «или» оператор. В Python это просто «или»

((df[colA] == row[colA]) or (df[colA] == row[colA]-1) 
+0

Я не думаю, что это проблема, так как это вопрос 'pandas', объекты представляют собой столбцы/векторы значений, и вы используете' '' или оператор для выполнения поэтапных сравнений. – Marius

0

df[colA] == row[colA]-1

Для сравнения двух столбцов элемента-на-элемент и приводит к булевой колонке, как

True 
True 
False 
True 
... 

То же самое для правой части, так после этих двух операций вы получите два булевых векторов, например:

True  True 
True  False 
False  True 
True  True 
...   ... 

| оператор делает поэтапное сравнение этих двух векторов:

True or True = True 
True or False = True 
False or True = True 
True or True = True 
... or ...  = ... 
+0

, но какое значение оно захватывает при индексировании? другими словами, если я просто тестирую одну сторону, я получаю значение, соответствующее этой строке, если true. поскольку обе стороны могут быть истинными, и одна из них всегда верна, какие значения строки будут выбраны? – user2891518

+0

Вам нужно расширить свой пример, я не могу так его понять.Когда вы делаете индексацию, вы вставляете логический вектор в фреймворк данных и возвращаете строки, где вектор имеет значение «True». – hellpanderrr

+0

добавил лучший пример. я думаю. – user2891518

Смежные вопросы