Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/theOehrly/Fast-F1/llms.txt

Use this file to discover all available pages before exploring further.

The SessionResults and DriverResult classes provide access to driver information and session results.

SessionResults

DataFrame containing session results and driver information for all drivers in a session. Constructor: SessionResults objects are typically accessed through the Session.results property rather than instantiated directly.

Available Columns

Driver Information

  • DriverNumber (str): Driver’s racing number as string
  • BroadcastName (str): Name as shown in broadcasts
  • Abbreviation (str): Three-letter driver abbreviation (e.g., ‘VER’, ‘HAM’, ‘LEC’)
  • FullName (str): Driver’s full name (e.g., ‘Max Verstappen’)
  • FirstName (str): Driver’s first name
  • LastName (str): Driver’s last name
  • HeadshotUrl (str): URL to driver’s headshot image
  • CountryCode (str): Driver’s country code (e.g., ‘NLD’, ‘GBR’)

Team Information

  • TeamName (str): Team name (short version without title sponsors)
  • TeamColor (str): Hex color code associated with the team (e.g., ‘3671C6’ for Red Bull)

API Identifiers

  • DriverId (str): Driver identifier used by Ergast API
  • TeamId (str): Constructor identifier used by Ergast API

Result Information

All Sessions

  • Position (float64): Driver’s finishing position
    • Available for: Race, Qualifying, Sprint, Sprint Shootout, Sprint Qualifying
    • Accounts for post-race penalties and disqualifications in Race/Qualifying/Sprint sessions
    • Uses NaN for DNS (Did Not Start)

Race/Sprint Sessions

  • ClassifiedPosition (str): Official classification result
    • Integer value if officially classified
    • ‘R’ (Retired), ‘D’ (Disqualified), ‘E’ (Excluded), ‘W’ (Withdrawn), ‘F’ (Failed to qualify), ‘N’ (Not classified)
  • GridPosition (float64): Starting grid position
  • Status (str): Finish status or DNF reason
    • Examples: ‘Finished’, ’+ 1 Lap’, ‘Crash’, ‘Gearbox’, ‘Engine’
  • Time (timedelta64[ns]): Total race time
    • Only available if driver was not more than one lap behind the leader
  • Points (float64): Championship points earned
  • Laps (float64): Number of laps completed

Qualifying Sessions

  • Q1 (timedelta64[ns]): Best Q1 lap time
  • Q2 (timedelta64[ns]): Best Q2 lap time
  • Q3 (timedelta64[ns]): Best Q3 lap time
SessionResults is indexed by driver number and sorted by finishing position by default.

Usage with Session

Accessing Results:
import fastf1

# Load session
session = fastf1.get_session(2023, 'Monaco', 'Race')
session.load()

# Get session results
results = session.results

# View all results
print(results[['Position', 'Abbreviation', 'TeamName', 'Points']])
Output:
    Position Abbreviation        TeamName  Points
1        1.0          VER  Red Bull Racing    25.0
11       2.0          PER  Red Bull Racing    18.0
16       3.0          LEC         Ferrari    15.0
...

Filtering and Querying

# Get specific driver by index (driver number)
ver_result = results.loc['1']
print(ver_result['FullName'])  # 'Max Verstappen'

# Filter by team
ferrari = results[results['TeamName'] == 'Ferrari']
print(ferrari[['Abbreviation', 'Position']])

# Get top 3
top_3 = results.head(3)
print(top_3[['Position', 'Abbreviation', 'Time']])

# Get drivers who finished
finished = results[results['Status'] == 'Finished']

# Get drivers who DNF'd
dnf = results[results['Status'] != 'Finished']
print(dnf[['Abbreviation', 'Status']])

Qualifying Results

# Load qualifying session
quali = fastf1.get_session(2023, 'Monaco', 'Q')
quali.load()

results = quali.results

# View qualifying times
print(results[['Position', 'Abbreviation', 'Q1', 'Q2', 'Q3']])
Output:
    Position Abbreviation              Q1              Q2              Q3
1        1.0          VER 0 days 00:01:11  0 days 00:01:10  0 days 00:01:10
16       2.0          LEC 0 days 00:01:11  0 days 00:01:10  0 days 00:01:10
...

DriverResult

Series containing result information for a single driver. Accessing DriverResult: DriverResult objects are obtained by:
  1. Using Session.get_driver(identifier)
  2. Slicing SessionResults to a single row
# Method 1: Using get_driver()
ver = session.get_driver('VER')
print(ver['FullName'])  # 'Max Verstappen'
print(ver['Position'])  # 1.0

# Method 2: Slicing SessionResults
ver = session.results.loc['1']  # By driver number
print(type(ver))  # <class 'fastf1.core.DriverResult'>

DriverResult Properties

All columns from SessionResults are accessible as properties:
driver = session.get_driver('VER')

# Access driver info
print(f"Name: {driver['FullName']}")
print(f"Number: {driver['DriverNumber']}")
print(f"Team: {driver['TeamName']}")
print(f"Country: {driver['CountryCode']}")

# Access result info
print(f"Position: {driver['Position']}")
print(f"Points: {driver['Points']}")
print(f"Status: {driver['Status']}")

dnf Property

Check if a driver did not finish.
type
bool
True if driver did not finish (DNF)
driver = session.get_driver('VER')
if driver.dnf:
    print(f"{driver['Abbreviation']} did not finish: {driver['Status']}")
else:
    print(f"{driver['Abbreviation']} finished in position {driver['Position']}")

Complete Usage Example

import fastf1
import pandas as pd

# Load race session
session = fastf1.get_session(2023, 'Monaco', 'Race')
session.load()

results = session.results

# Display results table
print("\n=== Race Results ===")
print(results[['Position', 'Abbreviation', 'TeamName', 'Status', 'Points']].to_string())

# Analyze results
print(f"\nTotal drivers: {len(results)}")
print(f"Finishers: {len(results[results['Status'] == 'Finished'])}")
print(f"DNFs: {len(results[results['Status'] != 'Finished'])}")

# Get winner details
winner = results.iloc[0]
print(f"\n=== Race Winner ===")
print(f"Driver: {winner['FullName']}")
print(f"Team: {winner['TeamName']}")
print(f"Time: {winner['Time']}")
print(f"Points: {winner['Points']}")

# Team comparison
print("\n=== Team Points ===")
team_points = results.groupby('TeamName')['Points'].sum().sort_values(ascending=False)
print(team_points)

# Get specific driver
ver = session.get_driver('VER')
print(f"\n=== {ver['FullName']} ===")
print(f"Position: {ver['Position']}")
print(f"Grid: {ver['GridPosition']}")
print(f"Points: {ver['Points']}")
print(f"DNF: {ver.dnf}")

# Compare teammates
print("\n=== Red Bull Racing ===")
rbr = results[results['TeamName'] == 'Red Bull Racing']
for _, driver in rbr.iterrows():
    print(f"{driver['Abbreviation']}: P{driver['Position']:.0f} - {driver['Points']} pts")

# Qualifying comparison
quali = fastf1.get_session(2023, 'Monaco', 'Q')
quali.load()

print("\n=== Qualifying Results ===")
quali_results = quali.results
top_10 = quali_results.head(10)
for _, driver in top_10.iterrows():
    q3_time = driver['Q3']
    if pd.notna(q3_time):
        print(f"P{driver['Position']:.0f} {driver['Abbreviation']}: {q3_time}")