Фильтрация строк с использованием фильтра в панде Dataframe - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь научиться использовать фильтр для получения строк на основе следующих условий:

  1. Проверка, содержит ли col-a T2, и
  2. Проверка, имеет ли col-bотметка времени между 7 и 9

Я думал, что фильтр - это крутой способ сделать это с помощью нескольких строк кода.Но я не смог получить желаемый результат, то есть строки, которые удовлетворяют вышеуказанным условиям.Каковы другие простые питонические способы сделать это (возможно, где?).Буду признателен за помощь в понимании работы фильтра.

import pandas as pd

dict = {'col-a': ['abcd.T1.123', 'xyz.T2.456', 'xyz.T2.456'],
        'col-b': ['07:57:00', '09:17:00', '12:57:00'],
        }

# Filtering based on col-a - contains T-id
original_df = pd.DataFrame(dict)
print("\n ORIGINAL DF\n", original_df)
filtered_a_df = original_df.filter(like='.T2', axis=0)
print("\n FILTERED DF\n", filtered_a_df)

# Filtering based on col-b - time between 7 and 9
filtered_b_df = original_df.filter(regex='^0[79]:', axis=0)
print("\n FILTERED DF\n", filtered_b_df)

1 Ответ

0 голосов
/ 25 октября 2018

Из документов :

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

Из вашего вопроса очень похоже, что вы пытаетесь фильтровать на основе содержимого вашего фрейма данных.Таким образом, вы можете использовать обычную индексацию:

filtered_a_df = original_df[original_df['col-a'].str.contains('T2')]

filtered_b_df = original_df[original_df['col-b'].between('07:00:00','09:00:00')]

>>> filtered_a_df
        col-a     col-b
1  xyz.T2.456  09:17:00
2  xyz.T2.456  12:57:00
>>> filtered_b_df
         col-a     col-b
0  abcd.T1.123  07:57:00

Для дальнейшего объяснения filter ваши условия могут работать, если вы пытаетесь фильтровать по индексу.Например, если у вас есть df2 в качестве исходного кадра данных, но с col-a в качестве индекса, вы можете использовать фильтр:

df2 = original_df.set_index('col-a')
>>> df2
                col-b
col-a                
abcd.T1.123  07:57:00
xyz.T2.456   09:17:00
xyz.T2.456   12:57:00

# In this case you can use either regex or like arguments
>>> df2.filter(regex='T2',axis=0)

               col-b
col-a               
xyz.T2.456  09:17:00
xyz.T2.456  12:57:00

Или вы можете фильтровать столбцы.Возвращаясь к исходному df, вы можете, например, фильтровать столбцы с -b в имени:

>>> original_df.filter(like='-b',axis=1)
      col-b
0  07:57:00
1  09:17:00
2  12:57:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...