Вы не можете получить ожидаемую форму, потому что 'subject_train' - это массив массивов. Чтобы избежать этого, вы можете разбить массив 1d, возвращаемый get_subjects, на несколько столбцов, а затем преобразовать в массив numpy, как показано ниже.
import pandas as pd
import numpy as np
# df has 5 rows and each cell is made of 3x4 arrays
df = pd.DataFrame({'data':[np.random.randint(low =1, high =10, size=(3,4)),
np.random.randint(low =1, high =10, size=(3,4)),
np.random.randint(low =1, high =10, size=(3,4)),
np.random.randint(low =1, high =10, size=(3,4)),
np.random.randint(low =1, high =10, size=(3,4)),
]})
def get_subjects(x):
#substitute to x = to_categorical(x, num_classes=len(subjects)+1).sum(axis=0)
x = x.reshape(-1) # this one reshapes 3x4 array to 1x12
return x
# apply(pd.series) splits the each row made of 1x12 array to 12 seperate columns
df["data"].apply(lambda x: get_subjects(x)).apply(pd.Series).to_numpy().shape
приводит к
5,12