1.6 Bitwise operators

To build more complicated expressions involving column comparisons, there are two bitwise operators.

An image of someone constructing a building from wooden blocks
Figure 7

The  operator means ‘and’ and the | operator (vertical bar, not uppercase letter ‘i’) means ‘or’. So, for example the expression:

(df['Country'] >= 'Latvia') & (df['Country'] <= 'Sweden')

will evaluate to a series containing Boolean values where the values are only if the equivalent rows in the dataframe contain the countries ‘’ to ‘’, inclusive. However, the following expression which uses | (or) rather than & (and):

(df['Country'] >= 'Latvia') | (df['Country'] <= 'Sweden')

will evaluate to  for all countries, because every country comes alphabetically after ‘’ (e.g. the ‘UK’) or before '' (e.g. ‘’).

Note the round brackets around each comparison. Without them you will get an error.

The whole expression with multiple comparisons has to be put within  to get a dataframe with only those rows that match the condition.

As a further example, using different columns, it is relatively easy to find the rows in  where '' is greater than  and where '' are greater than 10000.

df[(df['Population (1000s)'] > 80000) & (df['TB deaths'] > 10000)]

 CountryPopulation (1000s)TB deaths
13Bangladesh15659580000
36China139333741000
58Ethiopia9410130000
77India1252140240000
78Indonesia24986664000
124Nigeria173615160000
128Pakistan18214349000
134Philippines9839427000
141Russian Federation14283417000
190Viet Nam9168017000

These expressions can get long and complicated, making it easy to miss a crucial round or square bracket. In those cases it is best to break up the expression into small steps. The previous example could also be written as:

population = df['Population (1000s)']

deaths = df['TB deaths']

df[(population > 80000) & (deaths > 10000)]

Exercise 3 Bitwise operators

Complete Exercise 3 in the Exercise notebook 2.