2017-02-22 14 views
3

У меня есть dataframe, который выглядит следующим образом:Использование булева серии разной длины, чтобы выбрать строки из dataframe

df = pd.DataFrame({"piece": ["piece1", "piece2", "piece3", "piece4"], "No": [1, 1, 2, 3]}) 

    No piece 
0 1 piece1 
1 1 piece2 
2 2 piece3 
3 3 piece4 

У меня есть ряд с индексом, который соответствует «Нет» -column в dataframe. Он присваивает логические переменные «нет» -значения, например, так:

s = pd.Series([True, False, True, True]) 

0  True 
1 False 
2  True 
3  True 
dtype: bool 

Я хотел бы, чтобы выбрать те строки из dataframe, где в серии «Нет» -значение правда. Это должно привести к

No piece 
2 2 piece3 
3 3 piece4 

Я пробовал много индексации с ФР [ "Нет"]. ISIN (ы), или что-то вроде Df [с [ "Нет"] == TRUE] ... Но это еще не сработало.

+2

Вы ищете 'df [s]'? – Psidom

+0

@Psidom. Я бы сказал, что это ответ, но вы не должны отвечать на вопрос другим вопросом, если вам не нужно увеличивать количество символов :) –

+0

Нет, но я вижу, как выглядит мой пример. Проблема в том, что в df несколько строк могут иметь одно и то же значение «Нет» и что это значение не совпадает с индексом. Я отредактирую свой вопрос, чтобы лучше представить реальный вопрос. –

ответ

3

Я думаю, что вам нужно map значение в No столбце условия true/false и использовать его для Подменю:

df[df.No.map(s)] 

# No piece 
#2 2 piece3 
#3 3 piece4 

df.No.map(s) 

# 0 False 
# 1 False 
# 2  True 
# 3  True 
# Name: No, dtype: bool 
+0

Это гораздо более пандатонический ответ. Я рад, что OP выбрал это. –

+0

@MadPhysicist Спасибо. Оба ответа хороши для цели ОП. – Psidom

2

Вы пытаетесь индексировать в s с помощью df['No'], а затем использовать результат в виде маски на df:

df[s[df['No']].values] 

Окончательная маска должна быть извлечена как массив с использованием values, потому что дубликаты в индексе вызывают ошибку в противном случае.

+2

Думаю, вам нужно 'df [s [df ['No']]. Values]'. Это дает ошибку. Не мое голосование. – Psidom

+0

@Psidom. Вы абсолютно правы. –

+1

Исправлено, мы надеемся, что удалит нижний план. –