Using python and pandas you will need to filter your dataframes depending on a different criteria. You can do a simple filter and much more advanced by using lambda expressions. In this post you can see several examples how to filter your data frames ordered from simple to complex. Testing single or multiple values, expression with loc and isin, lambda functions:
So lets have this simple pandas data frame with some programming languages:
import pandas as pd
foo = [{
'Language': 'Python',
'Percent grow': 56
}, {
'Language': 'Java',
'Percent grow': 34
}, {
'Language': 'C',
'Percent grow': 25
}, {
'Language': 'C++',
'Percent grow': 12
}, {
'Language': 'go',
'Percent grow': 5
}]
df = pd.DataFrame(foo, index=pd.RangeIndex(0, len(foo)))
if you want to see the whole data set you can simply:
print(df)
result:
# Language Percent grow 0 Python 56 1 Java 34 2 C 25 3 C++ 12 4 go 5
The most basic and simple way to filter this data by column language is by:
print(df['Language'])
result:
0 Python 1 Java 2 C 3 C++ 4 go
you can also test your dataframe row by row with comparison:
print(df['Language'] == 'Java')
result:
0 False 1 True 2 False 3 False 4 False
Counting for dataframes in pandas can be done in several different ways depending on your needs:
print(len(df['Language'] == 'Java'))
print(df.count(axis='columns'))
print(df.loc[df['Language'] == "go"].count())
result:
5 0 2 1 2 2 2 3 2 4 2 dtype: int64 Language 1 Percent grow 1 dtype: int64
Next way to filter the output rows is by using loc and isin:
print(df.loc[df['Language'].isin(['Java','C'])])
result:
# Language Percent grow 1 Java 34 2 C 25
Sometimes the code above will raise an error(in case of more complex data types) and you need to apply lambda function. This is how to filter the rows using simple lambda condition:
mylambda = lambda x: x in ['C', 'C++']
print(df.loc[df['Language'].apply(mylambda)])
result:
# Language Percent grow 2 C 25 3 C++ 12
the same function but as a single line - testing the dataframes if contains the multiple values:
print(df.loc[df['Language'].apply(lambda x: x in ['C', 'C++'] )])
result:
# Language Percent grow 2 C 25 3 C++ 12
The whole example is here:
import pandas as pd
foo = [{
'Language': 'Python',
'Percent grow': 56
}, {
'Language': 'Java',
'Percent grow': 34
}, {
'Language': 'C',
'Percent grow': 25
}, {
'Language': 'C++',
'Percent grow': 12
}, {
'Language': 'go',
'Percent grow': 5
}]
df = pd.DataFrame(foo, index=pd.RangeIndex(0, len(foo)))
print(df)
print('--------------')
print(df['Language'])
print('--------------')
print(df['Language'] == 'Java')
print('--------------')
print(df.loc[df['Language'].isin(['Java','C'])])
print('--------------')
mylambda = lambda x: x in ['C', 'C++']
print(df.loc[df['Language'].apply(mylambda)])
print('--------------')
print(df.loc[df['Language'].apply(lambda x: x in ['C', 'C++'] )])
If you have any questions or problems feel free to share them.