Вы можете использовать DataFrame.groupby :
mask_columns_input=df.columns.str.contains('input')
inputs=[*df.columns[mask_columns_input]]
for i,group in df.groupby(inputs):
print(group)
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
input1 input2 input3 output1 output2
1 a1 a4 a5 2 3
input1 input2 input3 output1 output2
2 a6 a2 a3 4 5
Показать только выходы:
mask_columns_input=df.columns.str.contains('input')
inputs=[*df.columns[mask_columns_input]]
for i,group in df.groupby(inputs):
print(group.loc[:,~mask_columns_input])
Выход:
output1 output2
0 0 1
output1 output2
1 2 3
output1 output2
2 4 5
Также вы можете создать файл для сохранения:
df_by_inputs={''.join(i):group for i,group in df.groupby(inputs)}
for key in df_by_inputs:
print(f'df_by_inputs[{key}]')
print('-'*45)
print(df_by_inputs[key])
df_by_inputs[a1a2a3]
---------------------------------------------
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
0 a1 a2 a3 0 1
df_by_inputs[a1a4a5]
---------------------------------------------
input1 input2 input3 output1 output2
1 a1 a4 a5 2 3
1 a1 a4 a5 2 3
df_by_inputs[a6a2a3]
---------------------------------------------
input1 input2 input3 output1 output2
2 a6 a2 a3 4 5
2 a6 a2 a3 4 5
print(df_by_inputs['a1a2a3'])
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
0 a1 a2 a3 0 1