Python - двойное условие data.loc
У меня есть следующий фрейм данных:
Date Value1 Value2
01-01-01 01 01
02-01-01 02 00
03-01-01 03 01
04-01-01 04 101
В этом кадре данных я хотел бы выбрать только строки, имеющие Value2==0 and Value2>=100
Для этого я использую следующую команду:
data.loc[(data['Value2'] == 0) & (data['Value2'] >= 100)]
Которые возвращают мне пустой DataFrame. Я не очень понимаю, почему, потому что, когда я использовал отдельно:
data.loc[(data['Value2'] == 0)]
или же:
data.loc[(data['Value2'] >= 100)
Возвращает исправленные значения. Кто-нибудь знает, как реализовать этот выбор 2 условия?
2 ответа
Для вас фактический ввод правильный вывод пуст DataFrame
, Условия
(data['Value2'] == 0) & (data['Value2'] >= 100)
не может быть одновременно правдой. использование or
оператор вместо.
(data['Value2'] == 0) | (data['Value2'] >= 100)
Выход
Date Value1 Value2
02-01-01 02 00
04-01-01 04 101
Я бы использовал | оператор в этом примере, потому что значение не может быть равно указанному значению И равно другому. В моем примере я не использовал функцию.loc для поиска результатов, а просто использовал функцию print для иллюстрации сути:
import datetime
import pandas as pd
dates = [datetime.datetime(2001, 1, 1), datetime.datetime(2001, 2, 1), datetime.datetime(2001, 3, 1), datetime.datetime(2001, 4, 1)]
dates_2 = []
for date in dates:
date = date.strftime('%y-%m-%d')
dates_2.append(date)
df = pd.DataFrame({'Value1':[01, 02, 03, 04], 'Value2':[01, 00, 01, 101]}, index=dates)
print(df[(df['Value2'] == 0) | (df['Value2'] >= 100)])
Как вы можете видеть выше, мы используем скобки для оценки двух условий, как вы, но разница в том, что мы использовали | оператор в этом примере. Возможно, у вас просто была логическая ошибка. Выход:
Value1 Value2
2001-02-01 2 0
2001-04-01 4 101
Очевидно, что использование.loc должно просто возвращать значения для столбца Value2. Я только сделал оператор печати в этом примере, чтобы проиллюстрировать более широкий вопрос.