d = [pd.DataFrame(df[col].tolist()).add_prefix(col) for col in df.columns] df = pd.concat(d, axis=1) id0 id1 id2 value0 value1 value2 0 10 10 NaN apple orange None 1 15 67 NaN banana orange None 2 12 34 45.0 apple banana orange