import pandas as pd
df = pd.DataFrame({
'Analyze1_ab': ['Edge2||3.1E-07||-0.5', 'Edge1||6.4E-12||1.1'],
'Analyze2_zz': ['Edge2||2.1E-06||-0.9', 'Edge1||2.4E-11||9.4'],
'Analyze1_yy': ['Edge2||6.4E-02||-0.3', 'Edge1||1.4E-11||1.4'],
'Target': ['XXX_1', 'XXX_4'],})
df.columns = pd.MultiIndex.from_tuples(
[('Experiment1', 'Analyze1_ab'),
('Experiment2', 'Analyze1_yy'),
('Experiment1', 'Analyze2_zz'),
('Target', '')])
final_df = pd.DataFrame()
for col_name in df.columns:
if (col_name[1].startswith('Analyze') and
df[col_name].str.contains('||').all()):
splitted_analysis = df[col_name].str.split('\|\|', expand=True)
splitted_analysis.columns = ['Connection', 'Val1', 'Val2']
splitted_analysis.columns = pd.MultiIndex.from_tuples(
[(col_name[0], col_name[1], c) for c in splitted_analysis.columns])
final_df = pd.concat(objs=[final_df, splitted_analysis], axis=1)
target_col = pd.DataFrame(df[('Target', '')])
target_col.columns = pd.MultiIndex.from_tuples([('Target', '', '')])
final_df = pd.concat([final_df, target_col], axis=1)
Validation print(final_df)::
Experiment1 Experiment2 Experiment1 Target
Analyze1_ab Analyze1_yy Analyze2_zz
Connection Val1 Val2 Connection Val1 Val2 Connection Val1 Val2
0 Edge2 3.1E-07 -0.5 Edge2 6.4E-02 -0.3 Edge2 2.1E-06 -0.9 XXX_1
1 Edge1 6.4E-12 1.1 Edge1 1.4E-11 1.4 Edge1 2.4E-11 9.4 XXX_4
Verification pprint.pprint([c for c in final_df.columns])::
[('Experiment1', 'Analyze1_ab', 'Connection'),
('Experiment1', 'Analyze1_ab', 'Val1'),
('Experiment1', 'Analyze1_ab', 'Val2'),
('Experiment2', 'Analyze1_yy', 'Connection'),
('Experiment2', 'Analyze1_yy', 'Val1'),
('Experiment2', 'Analyze1_yy', 'Val2'),
('Experiment1', 'Analyze2_zz', 'Connection'),
('Experiment1', 'Analyze2_zz', 'Val1'),
('Experiment1', 'Analyze2_zz', 'Val2'),
('Target', '', '')]