Решения, использующие melt
, работают медленнее, чем оригинальный метод OP, которым они поделились в ответе здесь , особенно после ускорения моего комментария к этому ответу.
Я создал больший массив данных для тестирования:
df = pd.DataFrame({'name_array': np.random.rand(1000, 3).tolist()})
И синхронизация двух решений с использованием melt
на этом фрейме данных дает:
In [16]: %timeit pd.melt(df.name_array.apply(pd.Series).reset_index(), id_vars=['index'],value_name='name_array').drop('variable', axis=1).sort_values('index')
173 ms ± 5.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [17]: %timeit df['name_array'].apply(lambda x: pd.Series([i for i in x])).melt().drop('variable', axis=1)['value']
175 ms ± 4.86 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Метод ОП с ускорением, который я предложил в комментариях:
In [18]: %timeit pd.Series(np.concatenate(df['name_array']))
18 ms ± 887 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
И, наконец, самое быстрое решение из представленных здесь , но измененное, чтобы обеспечить серию вместо вывода данных кадра:
In [14]: from itertools import chain
In [15]: %timeit pd.Series(list(chain.from_iterable(df['name_array'])))
402 µs ± 4.68 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Этот последний метод быстрее, чем melt()
на 3 порядка, и быстрее, чем np.concatenate()
на 2 порядка.