Как насчет:
def create_frame(row_str, col_str, val_str,
record_delim=';', field_delim=','):
out = zip(row_str.split(record_delim),
col_str.split(record_delim),
val_str.split(record_delim))
df = pd.DataFrame({i: dict(zip(c.split(field_delim),
v.split(field_delim)))
for i, c, v in out})
return df.T
# Example
row='A;B;C'
col='aaa,bbb,ccc;aaa,bbb,abc;aaa,bbb,ccc'
val='99,80,90;100,100,100;90,90,90'
df = create_frame(row, col, val)
print(df)
[out]
aaa bbb ccc abc
A 99 80 90 NaN
B 100 100 NaN 100
C 90 90 90 NaN