Python - двойное условие data.loc - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий фрейм данных:

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 ]

0 голосов
/ 07 июня 2018

Я бы использовал |оператор в этом примере, потому что значение не может быть равно указанному значению И равно другому.В моем примере я не использовал функцию .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.Я только сделал оператор печати в этом примере, чтобы проиллюстрировать более широкий вопрос.

0 голосов
/ 07 июня 2018

Для вас фактический ввод правильный вывод пуст DataFrame.Условия

(data['Value2'] == 0) & (data['Value2'] >= 100)

не могут быть одновременными true .Вместо этого используйте оператор or.

(data['Value2'] == 0) | (data['Value2'] >= 100)

Выход

    Date     Value1   Value2
02-01-01     02       00
04-01-01     04      101
...