Используйте numpy's np.ufunc.outer :
Пример добавления:
np.add.outer(list_1,list_2)
выход:
array([[ 444, 777],
[ 777, 1110],
[1110, 1443],
[1308, 1641]])
Чтобы создать фрейм данных:
pd.DataFrame(np.add.outer(list_1,list_2), columns=list_2, index=list_1)
Выход:
321 654
123 444 777
456 777 1110
789 1110 1443
987 1308 1641
Для умножения используйте np.outer:
np.outer(list_1,list_2)
Выход:
array([[ 39483, 80442],
[146376, 298224],
[253269, 516006],
[316827, 645498]])
А для фрейма данных:
pd.DataFrame(np.outer(list_1,list_2), columns=list_2, index=list_1)
Выход:
321 654
123 39483 80442
456 146376 298224
789 253269 516006
987 316827 645498