You can rebuild a DataFrame by extracting values and recreating index:
result = []
[result.extend(zip(([df.baz[i]])*len(df.foo[i]), df.foo[i])) for i in range(len(df.baz))]
index = [[df.index[i]]*len(df.foo[i]) for i in range(len(df.baz))]
index = [item for sublist in index for item in sublist] # flatten
final = pd.DataFrame(result,index=index, columns = df.columns) # final result
result will be:
baz foo
W1 y a
W1 y b
W1 y c
W2 z s
W2 z r