Python Pandas - запрос и логическое значение в столбцах данных - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть датафрейм с несколькими столбцами, и я хочу сделать запрос на основе нескольких критериев.

Мой df (я не знаю, как выровнять столбцы по теме):

Date        Type          IsInScope CostTable  Value
2017-04-01  CostEurMWh    True      Standard   0.22
2018-01-01  CostEurMWh    True      Standard   0.80
2019-01-01  CostEurMWh    True      Standard   1.72
2017-04-01  CostEurMWh    False     Standard   0.00

У меня есть множество тысяч других строк с другими типами и датами.

С другой стороны, у меня есть кое-что, что я хотел бы оценить, и для этого мне нужно получитьправильное значение, основанное на параметрах.

У меня есть такой запрос: {'ID': 'Customer1', 'IsInScope': True, 'CostTable': 'Standard'}

Я хочу сделать запрос, подобный этому df.query ('IsInScope' == True & 'CostTable' == 'Standard'), но когда я делаю это, я получаю пустой df.Я думаю, что проблема связана с тем, как pandas управляет логическим значением в запросе, прочитав эту ветку: Как использовать функцию запроса с bool в пандах Python?

Когда я изменяю свои входные данные IsInScopeпо строкам типа «ДА» / «НЕТ», и я делаю запрос с «ДА» вместо «Истина», тогда он отлично работает, поэтому я знаю, что он исходит из части запроса.

Единственное, что яне знаете, как правильно выполнить мой запрос в этом примере.

Должен ли я преобразовать свой столбец в строку и не использовать логическое значение?

Я пытался изменить тип d дляСтолбцы IsInScope имеют тип bool, и это ничего не меняет.

Тип моего 'IsInCEEScope' - тип bool.

Надеюсь, у меня все ясно

Спасибо заВаша помощь

С уважением,

Эрик

1 Ответ

1 голос
/ 14 апреля 2019

Мы можем решить вашу проблему несколькими способами, я покажу вам два пути.

  1. С Boolean indexing
  2. С запросом.

Обратите внимание, поскольку ваш столбец IsInScope имеет тип bool, мы можем немного очистить ваш код следующим образом:


1. Булево индексирование

df1 = df[df['IsInScope'] & (df['CostTable'] == 'Standard')]

выход

print(df1)
         Date        Type  IsInScope CostTable  Value
0  2017-04-01  CostEurMWh       True  Standard   0.22
1  2018-01-01  CostEurMWh       True  Standard   0.80
2  2019-01-01  CostEurMWh       True  Standard   1.72

2. DataFrame.query

df2 = df.query("IsInScope  & CostTable == 'Standard'")

выход

print(df2)
         Date        Type  IsInScope CostTable  Value
0  2017-04-01  CostEurMWh       True  Standard   0.22
1  2018-01-01  CostEurMWh       True  Standard   0.80
2  2019-01-01  CostEurMWh       True  Standard   1.72

Примечание нам не нужно явно указывать Python IsInScope == True:

x = [True, False]

for y in x:
    if y:
        print(y)

выход

True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...