# Pandas: How to get Modulo of 2 DataFrames (element-wise)

## Overview

Pandas is a highly versatile library in Python, widely used in data manipulation and analysis. In this tutorial, weâ€™ll explore how to perform an element-wise modulo operation between two DataFrames. Whether youâ€™re a beginner or an advanced user, understanding how to efficiently carry out this operation can be a valuable skill in your data processing toolbox.

### Prerequisites

Before diving into modulo operations, ensure you have the following prerequisites:

• Python installed on your system.
• Pandas library installed. If not, you can install it using `pip install pandas`.
• Basic understanding of Python and Pandas.

### Understanding to Modulo Operation

The modulo operation finds the remainder of the division of one number by another. In Python, itâ€™s represented by the `%` symbol. For instance, `5 % 2` equals `1` because when 5 is divided by 2, the remainder is 1.

## Creating 2 Sample DataFrames

First, letâ€™s create two sample DataFrames to work with:

``````import pandas as pd

df1 = pd.DataFrame({
'A': [10, 20, 30, 40],
'B': [5, 15, 25, 35],
})

df2 = pd.DataFrame({
'A': [2, 3, 4, 5],
'B': [1, 2, 3, 4],
})
``````

These DataFrames represent simple numerical values for easy understanding.

## Basic Element-wise Modulo Operation

To perform an element-wise modulo operation between `df1` and `df2`, you can use the `%` operator as follows:

``````result = df1 % df2
print(result)
``````

Output:

``````   A  B
0  0  0
1  2  1
2  2  1
3  0  3
``````

This output displays the element-wise modulo results of the two DataFrames.

## Handling Non-Numeric Data

Itâ€™s possible that your DataFrames include non-numeric data, which could lead to errors during arithmetic operations. To handle this situation, ensure all data involved in the operation is numeric, or use the `.select_dtypes()` method to filter only numeric columns:

``````df1_numeric = df1.select_dtypes(include=['number'])
df2_numeric = df2.select_dtypes(include=['number'])
result = df1_numeric % df2_numeric
print(result)
``````

Output:

``````   A  B
0  0  0
1  2  1
2  2  1
3  0  3``````

By selecting only the numeric columns, we ensure that our modulo operation proceeds without errors.

For more complex operations or conditions, you can use the `apply()` and `applymap()` methods or a lambda function to perform the modulo operation. For example:

``````import pandas as pd

df1 = pd.DataFrame({
'A': [10, 20, 30, 40],
'B': [5, 15, 25, 35],
})

df2 = pd.DataFrame({
'A': [2, 3, 4, 5],
'B': [1, 2, 3, 4],
})

# Using apply() to iterate over rows and perform modulus operation
# It assumes df1 and df2 have the same index and columns order
result = df1.apply(lambda x: x % df2.loc[x.name], axis=1)

print(result)
``````

Output:

``````   A  B
0  0  0
1  2  1
2  2  1
3  0  3``````

This method offers more flexibility in handling operations that arenâ€™t directly supported by Pandas operators.

## Using NumPy for Modulo Operations

Another approach is to leverage the power of NumPy, a library for numerical computing in Python. You can convert your DataFrames to NumPy arrays and perform the modulo operation:

``````import numpy as np

result = np.mod(df1.values, df2.values)
print(result)
``````

Output:

``````[[0 0]
[2 1]
[2 1]
[0 3]]``````

This method is particularly useful for large DataFrames or when performance is a concern.

## Conclusion

In this tutorial, we explored various methods to perform an element-wise modulo operation between two DataFrames using Pandas. Starting from basic operations to more advanced techniques, weâ€™ve seen how to handle both numeric and non-numeric data, apply functions, and use NumPy for efficient computations. With these skills, you can manipulate and analyze your data more effectively.

Search tutorials, examples, and resources