Friday, May 27, 2022

Pandas – Filter DataFrame for multiple conditions

 Кадры данных Pandas допускают логическое индексирование, что является довольно эффективным способом фильтрации фрейма данных для нескольких условий. При логическом индексировании логические векторы, сгенерированные на основе условий, используются для фильтрации данных. Множественные условия с операторами | (для операции или), & (для операции и) и ~ (для операции не) могут быть сгруппированы с помощью круглых скобок ()

Используйте операторы &, |, ~ вместо и, или, соответственно нет

Pandas предоставляет операторы & (для и), | (для или) и ~ (для нет), чтобы применять логические операции к рядам и объединять несколько условий вместе при фильтрации кадра данных pandas. Если вместо этого вы используете логические операторы Python, это приведет к ошибке.

(.env) boris@boris-All-Series:~/PANDAS$ cat samplePandas1.py

import pandas as pd

data = {

    'Name': ['Microsoft Corporation', 'Google, LLC', 'Tesla, Inc.',\

             'Apple Inc.', 'Netflix, Inc.'],

    'Symbol': ['MSFT', 'GOOG', 'TSLA', 'AAPL', 'NFLX'],

    'Industry': ['Tech', 'Tech', 'Automotive', 'Tech', 'Entertainment'],

    'Shares': [100, 50, 150, 200, 80]

}

df = pd.DataFrame(data)

print(df)

print('\n')

df_filtered = df[(df['Industry']=='Tech')&(df['Shares']>=100)]

print(df_filtered)

print('\n')


df_filtered = df[(df['Shares']>=100) & (df['Shares']<=150)]

print(df_filtered)

(.env) boris@boris-All-Series:~/PANDAS$ python3 samplePandas1.py

                    Name Symbol       Industry  Shares

0  Microsoft Corporation   MSFT           Tech     100

1            Google, LLC   GOOG           Tech      50

2            Tesla, Inc.   TSLA     Automotive     150

3             Apple Inc.   AAPL           Tech     200

4          Netflix, Inc.   NFLX  Entertainment      80



                    Name Symbol Industry  Shares

0  Microsoft Corporation   MSFT     Tech     100

3             Apple Inc.   AAPL     Tech     200



                    Name Symbol    Industry  Shares

0  Microsoft Corporation   MSFT        Tech     100

2            Tesla, Inc.   TSLA  Automotive     150






























Выбор всех строк из данного фрейма данных, в которых «Возраст» равен 21, а «Поток» присутствует в списке параметров с использованием .loc[].

(.env) boris@boris-All-Series:~/PANDAS$ cat samplePandas2.py
import pandas as pd
  
record = {
  'Name': ['Ankit', 'Amit', 'Aishwarya', 'Priyanka', 'Priya', 'Shaurya' ],
  'Age': [21, 19, 20, 18, 17, 21],
  'Stream': ['Math', 'Commerce', 'Science', 'Math', 'Math', 'Science'],
  'Percentage': [88, 92, 95, 70, 65, 78]}
  
# create a dataframe
dataframe = pd.DataFrame(record, columns = ['Name', 'Age', 'Stream', 'Percentage'])
  
print("Given Dataframe :\n", dataframe) 
  
options = ['Math']
  
# selecting rows based on condition
rslt_df = dataframe.loc[(dataframe['Age'] == 21) &
              dataframe['Stream'].isin(options)]
  
print('\nResult dataframe :\n', rslt_df)

(.env) boris@boris-All-Series:~/PANDAS$ python3 samplePandas2.py
Given Dataframe :
         Name  Age    Stream  Percentage
0      Ankit   21      Math          88
1       Amit   19  Commerce          92
2  Aishwarya   20   Science          95
3   Priyanka   18      Math          70
4      Priya   17      Math          65
5    Shaurya   21   Science          78

Result dataframe :
       Name  Age   Stream  Percentage
0    Ankit   21     Math          88

Базовый подход

(.env) boris@boris-All-Series:~/PANDAS$ cat samplePandas3.py
import pandas as pd
  
record = {
  'Name': ['Ankit', 'Amit', 'Aishwarya', 'Priyanka', 'Priya', 'Shaurya' ],
  'Age': [21, 29, 20, 18, 27, 21],
  'Stream': ['Math', 'Commerce', 'Science', 'Math', 'Math', 'Science'],
  'Percentage': [88, 92, 95, 70, 65, 78]}
  
# create a dataframe
dataframe = pd.DataFrame(record, columns = ['Name', 'Age', 'Stream', 'Percentage'])
  
print("Given Dataframe :\n", dataframe) 
  
options = ['Math', 'Commerce']
  
# selecting rows based on condition
rslt_df = dataframe[(dataframe['Age'] > 21) &
          dataframe['Stream'].isin(options)]
  
print('\nResult dataframe :\n', rslt_df)

(.env) boris@boris-All-Series:~/PANDAS$ python3 samplePandas3.py
Given Dataframe :
         Name  Age    Stream  Percentage
0      Ankit   21      Math          88
1       Amit   29  Commerce          92
2  Aishwarya   20   Science          95
3   Priyanka   18      Math          70
4      Priya   27      Math          65
5    Shaurya   21   Science          78

Result dataframe :
     Name  Age    Stream  Percentage
1   Amit   29  Commerce          92
4  Priya   27      Math          65



No comments:

Post a Comment