data·vault_
← Catalog

NFL data by conference: AFC vs NFC from real game rows

Guide to the NFL Games & Betting Lines 1999-2026 pack · every number on this page was computed from the free games sample · per-team season records live in the stats-by-team guide.

"NFL data by conference" is a join problem, because the games CSV has no conference column. Each row names the teams by 3-letter abbreviation (home_team, away_team), so the split works in two steps: map every abbreviation to AFC or NFC, then group. The mapping is public record and it changes only twice in this dataset's span, which is why a small dictionary is enough.

Everything below runs on the free sample: 22 rows, weeks 1 and 2 of the 1999 season, the first two weeks of a file that covers all 7,548 games from 1999 through 2026. The sample is too small for any conclusion about which conference is better; it is exactly the right size for showing the method end to end, with real numbers you can recompute in a minute.

The 1999 conference map: 31 teams

The dataset starts in 1999, the season Cleveland returned as an expansion team and two seasons before Houston joined, so it opens with 31 teams: 16 AFC and 15 NFC. Seattle is the one franchise whose conference later changes, AFC West in 1999, NFC West from 2002 on.

DivisionTeams (3-letter codes)
AFC EastBUF, MIA, NE, NYJ, IND
AFC CentralBAL, CIN, CLE, JAX, PIT, TEN
AFC WestDEN, KC, OAK, SD, SEA
NFC EastARI, DAL, NYG, PHI, WAS
NFC CentralCHI, DET, GB, MIN, TB
NFC WestATL, CAR, NO, SF, STL

All 22 sample rows use only these 31 codes, and the dictionary maps all of them. If you extend past 2001, add the two changes above and keep the map keyed by season.

AFC vs NFC in the 22-row sample

The sample holds 22 games, 7 of them inter-conference and 15 within one conference. Here is every inter-conference game, straight from the joined data:

GameAwayScoreHomeWinner's conference
Week 1KC (AFC)17–20CHI (NFC)NFC
Week 1OAK (AFC)24–28GB (NFC)NFC
Week 1SF (NFC)3–41JAX (AFC)AFC
Week 1DET (NFC)28–20SEA (AFC)NFC
Week 1BAL (AFC)10–27STL (NFC)NFC
Week 2JAX (AFC)22–20CAR (NFC)AFC
Week 2SEA (AFC)14–13CHI (NFC)AFC

The counts and averages from those 22 rows:

SplitAFCNFC
Inter-conference wins (7 games)34
Points per team-game, inter-conference21.119.9
Points per team-game, all 22 games22.6 (25 team-games)20.6 (19 team-games)
Wins overall (22 games, no ties)1210

Three things in the sample are worth reading closely. Jacksonville beat NFC opponents twice, 41–3 over San Francisco and 22–20 at Carolina, and the 38-point win over the 49ers is the sample's widest margin. San Francisco managed 3 points, the lowest single-game score on either side. And the average total fell to 41.0 in inter-conference play against 44.6 in the 15 intra-conference games, a 3.6-point gap produced mostly by those two one-sided results rather than by any conference pattern. With 7 inter-conference rows, none of these numbers carry weight beyond the example.

One more quirk from the same rows: road teams won 12 of the 22 games, including Dallas winning 41–35 in overtime at Washington. A 22-game sample can tilt either way, which is part of the lesson about small slices.

Reproduce every number with pandas

The script below computes each table on this page from the free sample. It loads the CSV straight from the site, so you can paste it into a notebook and run it as is.

import pandas as pd

url = "https://jayjex.github.io/data-vault/data/nfl-games/sample.csv"
df = pd.read_csv(url)

# 1999 conference map, 31 teams (public record)
afc = ["BAL","BUF","CIN","CLE","DEN","IND","JAX","KC","MIA","NE",
       "NYJ","OAK","PIT","SD","SEA","TEN"]
nfc = ["ARI","ATL","CAR","CHI","DAL","DET","GB","MIN","NO",
       "NYG","PHI","SF","STL","TB","WAS"]
conf = {t: "AFC" for t in afc} | {t: "NFC" for t in nfc}

df["home_conf"] = df.home_team.map(conf)
df["away_conf"] = df.away_team.map(conf)

# inter-conference head-to-head
inter = df[df.home_conf != df.away_conf].copy()
inter["winner_conf"] = inter.apply(
    lambda g: g.home_conf if g.home_score > g.away_score else g.away_conf, axis=1)

print(len(inter))                       # 7
print(inter.winner_conf.value_counts()) # NFC 4, AFC 3

# points per team-game by conference, all 22 games
rows = []
for _, g in df.iterrows():
    rows.append((g.home_conf, g.home_score))
    rows.append((g.away_conf, g.away_score))
side = pd.DataFrame(rows, columns=["conf", "pts"])
print(side.groupby("conf").pts.mean())  # AFC 22.56, NFC 20.63

# average winning margin and totals in inter-conference play
inter["margin"] = (inter.home_score - inter.away_score).abs()
print(inter.margin.mean())                          # 10.43
print(inter.total.mean())                           # 41.0
intra = df[df.home_conf == df.away_conf]
print((intra.home_score + intra.away_score).mean()) # 44.6

Every printed value matches the tables above. The same three-step pattern, map, join, group, is all that changes when you move to the full file: the script keeps running once the conference dictionary grows a season key for 2002.

From the 22-row slice to all 7,548 games

The sample is the first 22 rows of games.csv, weeks 1 and 2 of 1999, 46 columns. The full pack carries the same schema across 1999 through 2026 (results through the 2025 season, plus 272 scheduled 2026 rows), so the conference split above becomes a per-season AFC vs NFC table with real sample sizes: about 55 inter-conference games per 17-game regular season now, and years of history behind each number. The pack also includes team-records-by-season.csv (861 rows) and season-summaries.csv (27 rows), a data dictionary, and SHA-256 checksums. The pandas quickstart loads the sample in two lines, and the stadium weather guide splits the same rows by roof and temperature instead of conference.

Checkout and download run through Getly. The full pack is 3 CSVs (7,548 + 861 + 27 rows), the derivation script, a data dictionary, and source SHA-256 checksums.

Source and license

The sample and the full games table derive from nflverse's schedules/games.csv, downloaded 2026-09-06 with the SHA-256 recorded in the pack. nflverse-data is released under CC BY 4.0, and the free sample carries the same terms. If you publish conference splits built on this data, credit it like this: "Data from nflverse, CC BY 4.0". The conference membership map is public record. Team names are factual data; no logos or league marks appear in the pack.

What this data is for

Conference splits answer historical questions: which conference won a given season's inter-conference slate, how scoring varied by side of the league, which divisions produced the biggest margins. The numbers here describe games already played, and this page makes no predictions or betting claims of any kind.

FAQ

How do I split NFL game data by conference?

The games CSV stores 3-letter team abbreviations and no conference column, so the split is a two-step join: load a dictionary that maps each abbreviation to AFC or NFC for its season, map both home_team and away_team through it, then group or filter. A game is inter-conference when the two mapped values differ. The full script above runs on the free sample and carries the complete 1999 map inline.

Who won AFC vs NFC games in the sample data?

The 22-row sample holds 7 inter-conference games from weeks 1 and 2 of the 1999 season. The NFC won 4 and the AFC won 3. AFC teams averaged 21.1 points in those games against 19.9 for NFC teams, and the average winning margin was 10.4 points. With 7 games, the split shows the method working on real rows rather than ranking the conferences.

Can I get AFC vs NFC stats for all seasons, not just the sample?

Yes. The full pack carries all 7,548 games from 1999 through 2026 with the same columns, so the same script produces conference splits for 27 seasons. Two changes matter when the years move: the Texans joined the AFC in 2002, and Seattle moved from the AFC West to the NFC West in 2002, so the conference map needs a season column. The data is historical record for research and analysis, not betting advice.