Skip to main content
The results.csv table contains the final race results for each driver in every Grand Prix.

Schema

FieldTypeDescription
resultIdintegerUnique identifier for each result
raceIdintegerForeign key to races.csv
driverIdintegerForeign key to drivers.csv
constructorIdintegerForeign key to constructors.csv
numberintegerDriver’s race number
gridintegerStarting grid position
positionintegerFinishing position (null if DNF)
positionTextstringText representation of finish position
positionOrderintegerNumerical order of finish
pointsfloatPoints scored in the race
lapsintegerNumber of laps completed
timestringTotal race time (for finishers)
millisecondsintegerTotal race time in milliseconds
fastestLapintegerLap number of fastest lap
rankintegerRank of fastest lap among all drivers
fastestLapTimestringFastest lap time (MM:SS.mmm format)
fastestLapSpeedfloatFastest lap speed in km/h
statusIdintegerForeign key to status.csv (finish/retirement reason)
Many fields contain \N for null values:
  • position is \N for DNF (Did Not Finish)
  • time and milliseconds are \N for non-finishers
  • fastestLap, fastestLapTime, and fastestLapSpeed may be \N for early retirements or when data wasn’t recorded

Sample Data

resultIdraceIddriverIdconstructorIdgridpositionpointslapstime
118111110581:34:50.616
2182252858+5.478
3183373658+8.163
41844114558+17.181

Relationships

References:
  • results.raceIdraces.raceId
  • results.driverIddrivers.driverId
  • results.constructorIdconstructors.constructorId
  • results.statusIdstatus.statusId

Dataset Statistics

  • Total Records: 27,260 results
  • Date Range: 1950 - Present
  • Results per Race: ~20 (varies by era)

Example Queries

Get race winner

import pandas as pd

results = pd.read_csv('results.csv')
race_winners = results[results['position'] == 1]
print(race_winners[['raceId', 'driverId', 'constructorId', 'points']])

Find podium finishes for a driver

# Lewis Hamilton (driverId = 1)
hamilton_podiums = results[
    (results['driverId'] == 1) & 
    (results['position'] <= 3)
]
print(f"Total podiums: {len(hamilton_podiums)}")

Calculate win percentage from pole

pole_sitters = results[results['grid'] == 1]
wins_from_pole = pole_sitters[pole_sitters['position'] == 1]
percentage = (len(wins_from_pole) / len(pole_sitters)) * 100
print(f"Win rate from pole: {percentage:.2f}%")

Get DNF results

dnf_results = results[results['position'] == '\\N']
print(dnf_results[['raceId', 'driverId', 'laps', 'statusId']])

Find fastest lap bonus points

# Fastest lap point introduced in 2019
fastest_lap_points = results[
    (results['rank'] == 1) & 
    (results['position'] <= 10)  # Must finish in top 10
]
print(fastest_lap_points[['raceId', 'driverId', 'fastestLapTime']])

Analyze grid position vs finish position

finishers = results[results['position'] != '\\N'].copy()
finishers['position'] = pd.to_numeric(finishers['position'])
finishers['positions_gained'] = finishers['grid'] - finishers['position']
top_gains = finishers.nlargest(10, 'positions_gained')
print(top_gains[['raceId', 'driverId', 'grid', 'position', 'positions_gained']])

Join with races and drivers for full context

races = pd.read_csv('races.csv')
drivers = pd.read_csv('drivers.csv')

full_results = results.merge(races, on='raceId') \
                      .merge(drivers, on='driverId')
                      
print(full_results[['year', 'name', 'forename', 'surname', 'position', 'points']])

Notes

  • positionText may contain “R” for retired, “D” for disqualified, “E” for excluded, “W” for withdrawn, “F” for failed to qualify, “N” for not classified
  • positionOrder always has a value, even for DNFs, showing the order of finishing/retirement
  • The race winner’s time field shows total race time, while others show gap to winner (e.g., “+5.478”)
  • Points systems have changed over F1 history - current system is 25-18-15-12-10-8-6-4-2-1 for top 10
  • Fastest lap bonus point (1 point) introduced in 2019, only awarded if driver finishes in top 10
  • \N represents null values throughout the dataset

Build docs developers (and LLMs) love