python - Broadcasting Error Pandas -


i have dataframe 4 columns. want element-wise division of first 3 columns value in 4th column

i tried:

df2 = pd.dataframe(df.ix[:,['col1', 'col2', 'col3']].values / df.col4.values) 

and got error:

valueerror: operands not broadcast shapes (19,3) (19,)  

my solution was:

df2 = pd.dataframe(df.ix[:,['col1', 'col2', 'col3']].values / df.col4.values.reshape(19,1)) 

this worked wanted, robust different numbers of rows need do:

.reshape(len(df),1) 

it seems ugly way have - there better way around array shape being (19,) seems odd has no second dimension.

best regards,

ben

you can div , pass axis=0 force division performed column-wise:

df2 = pd.dataframe(df.ix[:,['col1', 'col2', 'col3']].div(df.col4, axis=0)) 

your error because division using / being performed on minor axis in case row axis , there no direct alignment, see example:

in [220]: df = pd.dataframe(columns=list('abcd'), data = np.random.randn(8,4)) df  out[220]:                   b         c         d 0  1.074803  0.173520  0.211027  1.357138 1  1.418757 -1.879024  0.536826  1.006160 2 -0.029716 -1.146178  0.100900 -1.035018 3  0.314665 -0.773723 -1.170653  0.648740 4 -0.179666  1.291836 -0.009614  0.392149 5  0.264599 -0.057409 -1.425638  1.024098 6 -0.106062  1.824375  0.595974  1.167115 7  0.601544 -1.237881  0.106854 -1.276829  in [221]: df.ix[:,['a', 'b', 'c']]/df['d']  out[221]:       b   c   0   1   2   3   4   5   6   7 0 nan nan nan nan nan nan nan nan nan nan nan 1 nan nan nan nan nan nan nan nan nan nan nan 2 nan nan nan nan nan nan nan nan nan nan nan 3 nan nan nan nan nan nan nan nan nan nan nan 4 nan nan nan nan nan nan nan nan nan nan nan 5 nan nan nan nan nan nan nan nan nan nan nan 6 nan nan nan nan nan nan nan nan nan nan nan 7 nan nan nan nan nan nan nan nan nan nan nan 

this isn't obvious until understand how broadcasting works.


Comments