# Compute the Difference Twice Between Consecutive Numbers in a Series

In this thread, we will discuss various approaches for computing the difference of differences in a numerical series using the Pandas and NumPy libraries. This calculation can provide insights into how the data’s rate of change is occurring over time.

#### 1. Using "diff()" method:

• The `diff()` method takes a list of numbers and tells you the difference between each pair of adjacent numbers. So if you had a list of `[3, 6, 9]`, the `diff()` method would give you `[3, 3]`, because `6-3=3` and `9-6=3`.
• Since we want to calculate the difference of differences, the `diff()` is first applied to the original series, and then applied to the result again.
• The first value in the final result is `NaN` because the first element of the series is `NaN` (there is no previous element to subtract from 1).

• The `np.gradient()` function calculates the gradient of an array, which is the difference between consecutive elements of the array, adjusted for the distance between the elements.
• When you apply it to a 1D array, `np.gradient()` uses a method of “second-order accurate central difference scheme” that is twice as precise as other methods like `np.diff()` and `diff()` to calculate the differences between each element.
• For example, if you have an array `[1, 3, 5, 8]`, the function `np.gradient()` will output an array `[2, 2, 3]` by calculating the differences between `3` and `1`, `5` and `3`, and `8` and `5`, respectively.

#### 3. Using "np.diff()" method:

• The `np.diff()` is also a function of the NumPy library that computes the difference between consecutive elements of an array.
• One dissimilarity compared to `diff()` of Pandas is that, `np.diff()` does not return `NaN` for the first element of the output array, but instead returns the difference between the first and second elements of the input array.
• For example, we have an input array `[1, 3, 5, 8]`, the `np.diff()` returns `[2, 2, 3]` as output. The first element of the output array is the difference between the second and first elements of the input array. The second element is the difference between the third and second elements and so on.

#### 4. Using list comprehension method:

• We have used a for loop in this method to calculate the difference between the current element (at index `i`) and the next one (at index `i+1`).
• The for loop is run `len(series)-1` times i.e., one less than the length of the series, because of the last element in the series, there is no next element for the last element.
• The same for loop has been repeated two times to calculate the difference of differences of the series.

#### 5. Using lambda function and "map()" method:

• In this method, we have defined a simple lambda function that calculates the difference between two objects `x` and `y` using the `-` operator.
• The `map()` method applies this lambda function on `series[:-1]` which contains all elements of the series except the last, and `series[1:]` which contains all elements except the first.
• The difference is calculated element-wise between both objects and the process is repeated to calculate the difference of differences.