Фильтрация панд df с условиями

#python #pandas #dataframe #filter

Вопрос:

У меня есть панды df:

 df
                          DEtoDK         DKtoDE         
                            self other     self    other
2021-01-01 00:00:00 00:00    0.0   NaN  2230.08      NaN
2021-01-01 01:00:00 00:00    0.0   0.0  1887.72  2230.08
2021-01-01 02:00:00 00:00    0.0   0.0  1821.33  1887.72
2021-01-01 03:00:00 00:00    0.0   0.0  1743.20  1821.33
2021-01-01 04:00:00 00:00    0.0   0.0  1720.78  1743.20
...                          ...   ...      ...      ...
2021-05-31 19:00:00 00:00    0.0   0.0   782.88   892.16
2021-05-31 20:00:00 00:00    0.0   0.0   872.96   782.88
2021-05-31 21:00:00 00:00    0.0   0.0  1165.36   872.96
2021-05-31 22:00:00 00:00    0.0   0.0  1418.32  1165.36
2021-05-31 23:00:00 00:00    0.0   0.0  1393.28  1418.32
[3624 rows x 4 columns]
 

Я хотел бы отфильтровать этот df с некоторыми условиями, например, если значения (DEtoDK, self) или (DKtoDE, self) равны 0. Для этого я использую следующее:

 df.loc[(df[('DEtoDK', 'self')].values == 0) | (df[('DKtoDE', 'self')].values == 0)]
 

И это работает, однако, когда df не имеет никаких значений 0, я ожидал, что сгенерирую пустой фрейм данных, однако я получаю ошибку ключа.

 df.loc[(df[('DEtoDK', 'self')].values == 'test') | (df[('DKtoDE', 'self')].values == 'test')]
KeyError: False
 

таким образом , условия генерируются False вместо пустого массива, поэтому панды не могут найти. Как я могу исправить это поведение?

Ответ №1:

Нет необходимости в values :

 df.loc[(df[('DEtoDK', 'self')] == 0) | (df[('DKtoDE', 'self')] == 0)]
 

Комментарии:

1. работает тай! и из .values -за того, что я получал ошибку для 'test'