По сути, вы проверяете не один результат, а все результаты и отфильтровывает их.
Предполагается, что вы хотите, чтобы все результаты прошли и были истинными, и случай, когда все они верны.
# COMPARE IF THE SAME DATASETS ARE PRESENT, EVEN AFTER PASSING ALL THE CONDITIONS AS TRUE
if df2[df2['Pensioner Name'].str.match('^[a-zA-Z\s\.]*$'].equals(df2['Pensioner Name']) and df2[df2['CNIC'].str.match('^[\'][0-9+]{5}-[0-9+]{7}-[0-9]{1}[\']$'].equals(df2['CNIC']) and df[df2['Wallet Account No'].astype(str).str.contains('^[0-9+]{8}$'].equals(df2['Wallet Account No'].astype(str)) and df2[df2['Mobile Number'].astype(str).contains('^[3+][0-9+]{9}$')].equals(df2[['Mobile Number'].astype(str)):
return df2.to_html()
else:
return '''<h2> Error in data </h2>'''