Вы можете использовать pd.concat для хранения всех результатов в одном кадре данных:
pd.concat([myFunction(row['Portfolio'], row['Value'])
for _, row in df_input.iterrows()], axis=1)
Сначала вы создаете список pd.DataFrames с пониманием списка (вы также можете использовать обычный l oop). Затем вы объединяете все кадры данных вдоль оси = 1 .
Вывод:
Book1 Book2 Book1 Book2
0 10 5 6 11
1 20 10 12 22
2 30 15 18 33
3 40 20 24 44
Вы упомянули, что df_input имеет намного больше строк в исходном кадре данных. Чтобы учесть это, вам нужен еще один l oop (минимальный пример):
data = {'Portfolio': ['Book1', 'Book2', 'Book1', 'Book2'],
'Value': [10, 5, 6, 11]}
df_input = pd.DataFrame(data, columns=['Portfolio', 'Value'])
df_input['Value2'] = df_input['Value'] * 100
pd.concat([myFunction(row['Portfolio'], row[col])
for col in df_input.columns if col != 'Portfolio'
for (_, row) in df_input.iterrows()], axis=1)
Вывод:
Book1 Book2 Book1 Book2 Book1 Book2 Book1 Book2
0 10 5 6 11 1000 500 600 1100
1 20 10 12 22 2000 1000 1200 2200
2 30 15 18 33 3000 1500 1800 3300
3 40 20 24 44 4000 2000 2400 4400
Возможно, вы захотите переименовать столбцы или объединить результирующий кадр данных в некоторых другой путь. Но для этого мне пришлось угадывать (и я стараюсь не угадывать перед лицом двусмысленности).