Вот довольно простое сообщение, которое использует метод split
из accessand pandas str
, а затем использует NumPy для выравнивания каждой строки в один массив.
Соответствующие значения извлекаются путем повторения нерасширенный столбец правильное количество раз с np.repeat
.
var1 = df.var1.str.split(',', expand=True).values.ravel()
var2 = np.repeat(df.var2.values, len(var1) / len(df))
pd.DataFrame({'var1': var1,
'var2': var2})
var1 var2
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
Есть возможность работать с фрагментами памяти или массивами cython http://docs.cython.org/src/userguide/memoryviews.html
import numpy as np
cimport numpy as np
cdef class Model:
cdef int [:] A
def sum(self):
for 0 <= i < N:
s += self.A[i]
return s
def __init__(self):
self.A = np.arange(1000)
Решение, которое вы используете в настоящее время, я использую, т. е. создаю локальную копию функции. Это не изящно, но я не думаю, что вы нанесли огромный удар производительности (или, по крайней мере, в моем случае, я много работаю над этим методом, поэтому он не делает заметной разницы). Я также создал C-массив в методе __cinit__, а затем заполнил его данными в __init__ (убедитесь, что вы правильно используете __dealloc__ для очистки). Вы теряете некоторые функции массива numpy, но вы все равно можете использовать его, как и для c-массива.
Вы также можете проверить обсуждение в этом более старом письме в списке cython:
http://codespeak.net/pipermail/cython-dev/2009-April/005214.html