У меня есть следующая таблица
data = {'weekday': ["Monday", "Monday", "Monday",
"Thursday", "Thursday", "Thursday", "Thursday"],
'Person 1': [12, 6, 5, 8, 11, 6, 4],
'Person 2': [10, 6, 11, 5, 8, 9, 12],
'Person 3': [8, 5, 7, 3, 7, 11, 15]}
df = pd.DataFrame(data, columns=['weekday',
'Person 1', 'Person 2', 'Person 3'])
DF
weekday Person 1 Person 2 Person 3
0 Monday 12 10 8
1 Monday 6 6 5
2 Monday 5 11 7
3 Thursday 8 5 3
4 Thursday 11 8 7
5 Thursday 6 9 11
6 Thursday 4 12 15
Для каждого уникального элемента в столбце «День недели» объедините их в длинный массив, чтобы получить следующий вывод
array([[12., 10., 8., 6., 6., 5., 5., 11., 7., 0., 0., 0.],
[ 8., 5., 3., 11., 8., 7., 6., 9., 11., 4., 12., 15.]])
мое текущее решение:
def getting_numpy_array(df, colum_name='weekday'):
colum_name_to_use = [i for i in df.columns if i!=colum_name]
max_seq_to_pad=df[colum_name].value_counts().max()* df[colum_name_to_use].shape[1]
uniq_items = df[colum_name].unique()
stack_np = np.zeros(max_seq_to_pad)
for item in uniq_items:
group_value=df.loc[df[colum_name]==item][colum_name_to_use].get_values().reshape(-1)
if group_value.shape[0]==max_seq_to_pad:
stack_np=np.vstack((stack_np, group_value))
else:
group_value=np.pad(group_value, [0, max_seq_to_pad-group_value.shape[0]], mode='constant')
stack_np=np.vstack((stack_np, group_value))
return stack_np[1:]
getting_numpy_array (df, colum_name = 'weekday')
array([[12., 10., 8., 6., 6., 5., 5., 11., 7., 0., 0., 0.],
[ 8., 5., 3., 11., 8., 7., 6., 9., 11., 4., 12., 15.]])
Есть ли лучшие способы решить эту проблему?