У меня есть словарь, содержащий списки значений разной длины. Мне нужно иметь возможность обрабатывать все значения в определенном индексе (столбце) в каждом списке вместе. Единственный способ, который я нашел, - это преобразовать его в фрейм данных pandas. Однако это очень медленно для фактического набора данных, который может включать 1000+ событий (строк) с сотнями наблюдений (столбцов) на событие.
Упрощенный пример будет выглядеть примерно так:
event_dict= {}
event_dict['event1'] = [1,2,3,4,5]
event_dict['event2'] = [1,3,5,4,7,8,9,8]
event_dict['event3'] = [1,3,2,4]
event_dict['event4'] = [1, -1, 1, 2, 2,5]
#actual dictionary can have thousand+ rows with 100+ entries per row
event_df = pd.DataFrame()
for key in event_dict:
temp_df = pd.DataFrame(event_dict[key])
event_df = event_df.append(temp_df, ignore_index = True)
print(values_df)
values_df.mean()
Результат будет примерно таким:
0 1 2 3 4 5 6 7
0 1 2 3 4 5.0 NaN NaN NaN
1 1 3 5 4 7.0 8.0 9.0 8.0
2 1 3 2 4 NaN NaN NaN NaN
3 1 -1 1 2 2.0 5.0 NaN NaN
0 1.000000
1 1.750000
2 2.750000
3 3.500000
4 4.666667
5 6.500000
6 9.000000
7 8.000000
Поскольку каждый список содержит разное количество значений, мне трудно найти эффективную реализацию, которая не использует фреймы данных. Фактический код занимает больше всего времени на создание самого values_df, учитывая количество необходимых итераций et c. Когда у меня есть фрейм данных, я могу векторизовать его, но до этого я застреваю.