Я некоторое время играл с Пандами, поэтому я не уверен, что это реально выполнимо, позвольте мне разоблачить мою проблему:
У меня есть массив, такой как:
0 |1|2|3|
1 |6|4|3|
2 |6|1|
dtype: object
Затем у меня есть фрейм данных, сгенерированный для одного горячего кодирования такого массива:
[[False False False False False]
[False False False False False]
[ False False False False False]]
Каждая строка соответствует строке массива, а столбцы - это разные значения каждого элемента массива, разделенные знаком |.
На данный момент я хочу присвоить значение True / False каждой ячейке в зависимости от ее индекса и столбца.Значение ячейки (R, C) будет истинным, если столбец C содержится в элементе массива A [R]
например, ячейка (0,1) = True
Требуетсясделай это ина.векторизованный подход, не уверен, что смогу сделать это, просто создавая изначально пустой фрейм данных, возможно, мне понадобится кодировать индекс и столбец в значении ячейки?
Я использовал фиктивные переменные get, но взглянул на внутренние компоненты.увидеть итерацию над тегами, просто интересно, можно ли это заменить (мне также пришлось немного изменить его, так как тип был применен позже, временно вызывая огромный объем памяти)
Get Dummies
def str_get_boolean_dummies(arr, sep='|'):
arr = arr.fillna('')
try:
arr = sep + arr + sep
except TypeError:
arr = sep + arr.astype(str) + sep
tags = set()
for ts in arr.str.split(sep):
tags.update(ts)
tags = sorted(tags - set([""]))
dummies = pd.np.empty((len(arr), len(tags)), dtype=pd.np.bool)
for i, t in enumerate(tags):
pat = sep + t + sep
dummies[:, i] = map_infer(arr.values, lambda x: pat in x)