I am starting out with the following dataframe (df):
variable key i j k
0 a 1 0 0 0
1 a 2 0 0 0
2 a 3 0 0 0
3 b 2 0 0 0
4 c 1 0 0 0
5 c 3 0 0 0
Using the following code, I transform it into the 2nd displayed dataframe (out).
out = pd.DataFrame()
out['keys_master'] = list(range(min(df['key']), max(df['key']) + 1))
for value in ['a', 'b', 'c']:
temp = df.loc[df[variable_string] == value]
cols = [f'{i}{value}' for i in df.columns.values]
temp.columns = cols
out = pd.concat([out, temp], axis=1)
# Drop columns that contain variable names, then drop empty rows
out.drop(columns=cols[0], inplace=True)
out.dropna(axis=0, how='all', inplace=True)
out:
keys_master keya ia ja ka keyb ib jb kb keyc ic jc kc
0 1.0 1.0 0.0 0.0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN
1 2.0 2.0 0.0 0.0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN
2 3.0 3.0 0.0 0.0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN 2.0 0.0 0.0 0.0 NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 0.0 0.0 0.0
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN 3.0 0.0 0.0 0.0
How can I transform out into a dataframe like this?
keys_master keya ia ja ka keyb ib jb kb keyc ic jc kc
0 1.0 1.0 0.0 0.0 0.0 NaN NaN NaN NaN 1.0 0.0 0.0 0.0
1 2.0 2.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 NaN NaN NaN NaN
2 3.0 3.0 0.0 0.0 0.0 NaN NaN NaN NaN 3.0 0.0 0.0 0.0