Просто используйте встроенную библиотеку многопроцессорной обработки.Я отредактировал ваш код для работы на нескольких ядрах одновременно.
import pandas as pd
from multiprocessing import Pool, cpu_count
CORE_NUMBER = cpu_count()
def func1(d, a):
product = d.prod(axis=1)*a
print(product)
# input 1
a1=2
input1 = pd.DataFrame({'F':[2,3,4,5,1,2], 'E':[12,4,5,6,7,2], 'N':[2,7,6,5,4,3]})
# input 2
a2 = 0
input2 = pd.DataFrame({'F':[0,32,4,12,1,2], 'E':[1,4,5,0,7,2], 'N':[21,7,61,5,4,3]})
# input 3
a3=100
input3 = pd.DataFrame({'F':[0,1,1,1,1,1], 'E':[1,12,5,110,7,2], 'N':[3,7,61,5,1,1]})
data = [(input1,a1),(input2,a2),(input3,a3)]
pool = Pool(CORE_NUMBER)
# call function
pool.starmap(func1, data)
pool.close()
pool.join()