df = pd.read_excel(filename)
#added new column for testing
print (df)
SPEC_ID Z_PRIMARY_SITE new
0 Specification ID Primary Site tt
#intersection by first row
cond = pd.Index(df.iloc[0]).intersection(reference.columns)
df1 = reference[cond].copy()
#create first row by columns names
df1.loc[-1] = df1.columns
d = dict(zip(df.iloc[0], df.columns))
#and rename columns for df columns
df1 = df1.sort_index().rename(columns=d)
print (df1)
SPEC_ID Z_PRIMARY_SITE
-1 Specification ID Primary Site
0 1234 Site1
1 12345 Site2
2 123456 Site3
cond = pd.Index(df.iloc[0]).intersection(reference.columns)
df1 = reference[cond].copy()
df1 = pd.DataFrame([df1.columns], columns=df1.columns).append(df1)
d = dict(zip(df.iloc[0], df.columns))
df1 = df1.rename(columns=d)
print (df1)
SPEC_ID Z_PRIMARY_SITE
0 Specification ID Primary Site
0 1234 Site1
1 12345 Site2
2 123456 Site3
df1.to_excel(filename,index = False)