This looks like a portfolio diversification kind of code. The aapl, cisco, ibm and amzn are DataFrames containing at least a NormedReturn field.
aapl = pd.DataFrame({'NormedReturn':[1,2,3]})
cisco = pd.DataFrame({'NormedReturn':[4,5,6]})
ibm = pd.DataFrame({'NormedReturn':[7,8,9]})
amzn = pd.DataFrame({'NormedReturn':[10,11,12]})
The DataFrames might as well be containing single values, like 'NormedReturn':[13], no problem.
Zip function zips together iterables. It is assigning the given allocation weights to these returns; .3 weigth to the aapl stock, .2 weight to the cisco stock, etc:
for stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
print stock_df, allo
Gives us the stock returns and the respective allocation weight:
NormedReturn
0 1
1 2
2 3 0.3
NormedReturn
0 4
1 5
2 6 0.2
NormedReturn
0 7
1 8
2 9 0.4
NormedReturn
0 10
1 11
2 12 0.1
Finally the assignment multiplies return series by the allocation weights:
for stock_df, allo in zip((aapl, cisco, ibm, amzn), [.3,.2,.4,.1]):
stock_df['Allocation'] = stock_df['NormedReturn']*allo
print stock_df
Gives your allocation, i.e. return*weight series:
NormedReturn Allocation
0 1 0.3
1 2 0.6
2 3 0.9
NormedReturn Allocation
0 4 0.8
1 5 1.0
2 6 1.2
NormedReturn Allocation
0 7 2.8
1 8 3.2
2 9 3.6
NormedReturn Allocation
0 10 1.0
1 11 1.1
2 12 1.2
I think after this your friend must be putting all of the NormedReturns and Allocations together, which is like your final portfolio return.