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.