Bird
Raised Fist0
Data Analysis Pythondata~5 mins

Shift and lag operations in Data Analysis Python - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the shift() function do in data analysis?
The shift() function moves data up or down by a specified number of periods, creating a lag or lead effect. It helps compare current values with past or future values.
Click to reveal answer
beginner
How is shift() different from lag()?
In pandas, shift() is used to create lag or lead values by shifting data. lag() is a similar concept but is more common in SQL or other tools. Both help compare values across time.
Click to reveal answer
beginner
What happens to the data when you shift it forward by 1 period?
When you shift data forward by 1 period, each value moves down by one row, and the first row becomes empty (usually filled with NaN). This shows the previous value for each row.
Click to reveal answer
intermediate
Why are shift and lag operations useful in time series analysis?
They help compare current data points with past or future points. This is useful to find trends, calculate differences, or create features like moving averages.
Click to reveal answer
intermediate
How do you handle missing values created by shift operations?
Missing values appear because shifting moves data out of the original index. You can fill them using methods like fillna(), drop them, or keep them if they represent missing time points.
Click to reveal answer
What does df['value'].shift(1) do to the 'value' column in a DataFrame?
ADuplicates the column
BMoves all values up by one row, inserting NaN at the bottom
CSorts the column in ascending order
DMoves all values down by one row, inserting NaN at the top
If you want to compare today's sales with yesterday's sales, which operation would you use?
Ashift(-1)
Bsort()
Cshift(1)
Dgroupby()
What value typically fills the empty spots after a shift operation?
A0
BNaN
CEmpty string
DOriginal value
Which pandas function is commonly used to fill missing values after a shift?
Afillna()
Bdropna()
Csort_values()
Dgroupby()
What does shift(-1) do?
AMoves data up by one row
BDuplicates data
CMoves data down by one row
DDeletes data
Explain how shift operations help in comparing values over time in a dataset.
Think about how you look at yesterday's weather to understand today's changes.
You got /4 concepts.
    Describe a real-life example where you would use lag or shift operations in data analysis.
    Consider how businesses track daily sales compared to previous days.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the shift(1) function do to a pandas DataFrame column?
      easy
      A. Moves the data down by one row, creating a lag of previous values
      B. Moves the data up by one row, creating a lead of next values
      C. Sorts the column in ascending order
      D. Removes the first row of the column

      Solution

      1. Step 1: Understand the shift function

        The shift(1) moves data down by one row, so each value is replaced by the previous row's value.
      2. Step 2: Identify lag vs lead

        Positive shift values create lag (previous rows), so shift(1) creates lag by one row.
      3. Final Answer:

        Moves the data down by one row, creating a lag of previous values -> Option A
      4. Quick Check:

        shift(1) = lag by 1 row [OK]
      Hint: Positive shift means lag (previous rows), negative means lead [OK]
      Common Mistakes:
      • Confusing shift(1) with shift(-1)
      • Thinking shift sorts data
      • Assuming shift removes rows
      2. Which of the following is the correct syntax to create a new column 'prev_value' that contains the previous row's value of column 'value' in pandas?
      easy
      A. df['prev_value'] = df['value'].shift(-1)
      B. df['prev_value'] = shift(df['value'], 1)
      C. df['prev_value'] = df.shift('value', 1)
      D. df['prev_value'] = df['value'].shift(1)

      Solution

      1. Step 1: Recall pandas shift syntax

        The correct syntax is to call shift() on the Series, like df['value'].shift(1).
      2. Step 2: Check each option

        df['prev_value'] = df['value'].shift(1) uses correct syntax. df['prev_value'] = df['value'].shift(-1) shifts in the wrong direction. df['prev_value'] = df.shift('value', 1) uses wrong method call. df['prev_value'] = shift(df['value'], 1) uses undefined function.
      3. Final Answer:

        df['prev_value'] = df['value'].shift(1) -> Option D
      4. Quick Check:

        Correct pandas shift syntax = df['prev_value'] = df['value'].shift(1) [OK]
      Hint: Use Series.shift(n) to lag by n rows [OK]
      Common Mistakes:
      • Using negative shift for previous row
      • Calling shift on DataFrame with wrong arguments
      • Using undefined shift function
      3. Given the DataFrame:
      import pandas as pd
      df = pd.DataFrame({'value': [10, 20, 30, 40]})
      df['lag1'] = df['value'].shift(1)
      df['lead1'] = df['value'].shift(-1)
      print(df)

      What is the output?
      medium
      A. value lag1 lead1 0 10 10.0 20.0 1 20 20.0 30.0 2 30 30.0 40.0 3 40 40.0 NaN
      B. value lag1 lead1 0 10 20.0 NaN 1 20 30.0 10.0 2 30 40.0 20.0 3 40 NaN 30.0
      C. value lag1 lead1 0 10 NaN 20.0 1 20 10.0 30.0 2 30 20.0 40.0 3 40 30.0 NaN
      D. value lag1 lead1 0 10 NaN NaN 1 20 10.0 20.0 2 30 20.0 30.0 3 40 30.0 40.0

      Solution

      1. Step 1: Calculate lag1 column

        shift(1) moves values down by one, so first row is NaN, second row gets 10, third 20, fourth 30.
      2. Step 2: Calculate lead1 column

        shift(-1) moves values up by one, so last row is NaN, third row gets 40, second 30, first 20.
      3. Final Answer:

        value lag1 lead1 0 10 NaN 20.0 1 20 10.0 30.0 2 30 20.0 40.0 3 40 30.0 NaN -> Option C
      4. Quick Check:

        Positive shift = lag, negative shift = lead [OK]
      Hint: Positive shift adds NaN on top, negative shift adds NaN at bottom [OK]
      Common Mistakes:
      • Mixing lag and lead directions
      • Forgetting NaN appears at shifted edges
      • Confusing shift with sorting
      4. What is wrong with this code snippet?
      df['prev'] = df.shift(1)['value']

      Assuming df is a pandas DataFrame with a column 'value'.
      medium
      A. It works correctly and creates a lagged column
      B. It shifts the entire DataFrame, not just the 'value' column, which is inefficient
      C. It causes a syntax error due to wrong indexing
      D. It will cause a KeyError because shift returns a Series, not DataFrame

      Solution

      1. Step 1: Understand what df.shift(1) does

        df.shift(1) shifts the entire DataFrame down by one row, including all columns.
      2. Step 2: Check indexing and efficiency

        Accessing ['value'] after shift works, but shifting entire DataFrame is inefficient if only one column is needed.
      3. Final Answer:

        It shifts the entire DataFrame, not just the 'value' column, which is inefficient -> Option B
      4. Quick Check:

        Shift on DataFrame shifts all columns [OK]
      Hint: Shift only the needed column, not whole DataFrame [OK]
      Common Mistakes:
      • Assuming shift returns Series when called on DataFrame
      • Expecting syntax error from indexing
      • Ignoring performance impact
      5. You have a time series DataFrame df with a column 'sales'. You want to create a new column 'pct_change' that shows the percentage change from the previous day. Which code correctly uses shift to calculate this?
      hard
      A. df['pct_change'] = (df['sales'] - df['sales'].shift(1)) / df['sales'].shift(1) * 100
      B. df['pct_change'] = (df['sales'].shift(1) - df['sales']) / df['sales'] * 100
      C. df['pct_change'] = df['sales'].pct_change(1)
      D. df['pct_change'] = df['sales'].shift(-1) / df['sales'] * 100

      Solution

      1. Step 1: Understand percentage change formula

        Percentage change = (current - previous) / previous * 100.
      2. Step 2: Apply shift to get previous value

        df['sales'].shift(1) gives previous day's sales, so formula in df['pct_change'] = (df['sales'] - df['sales'].shift(1)) / df['sales'].shift(1) * 100 matches the formula.
      3. Step 3: Check other options

        df['pct_change'] = (df['sales'].shift(1) - df['sales']) / df['sales'] * 100 reverses numerator and denominator incorrectly. df['pct_change'] = df['sales'].pct_change(1) uses built-in method but question asks for shift usage. df['pct_change'] = df['sales'].shift(-1) / df['sales'] * 100 uses lead instead of lag.
      4. Final Answer:

        df['pct_change'] = (df['sales'] - df['sales'].shift(1)) / df['sales'].shift(1) * 100 -> Option A
      5. Quick Check:

        Percentage change uses lag with shift(1) [OK]
      Hint: Use (current - shift(1)) / shift(1) for percent change [OK]
      Common Mistakes:
      • Using shift(-1) instead of shift(1)
      • Reversing numerator and denominator
      • Confusing built-in pct_change with manual shift
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard