a bit of a tortuous path, but it seems to get the desired shape while remaining within the context of the DataFrames package
sdf=stack(DataFrame(dfrow),names(dfrow))
sdf1=select(sdf,:value, :variable => ByRow(r->split(r,limit=2))=>[:Element,:mM,])
unstack(sdf1,:mM,:value)