Панды получают индекс и столбец из ячейки в векторном подходе - PullRequest
0 голосов
/ 23 мая 2019

Я некоторое время играл с Пандами, поэтому я не уверен, что это реально выполнимо, позвольте мне разоблачить мою проблему:

У меня есть массив, такой как:

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)

1 Ответ

0 голосов
/ 23 мая 2019

Если я правильно понимаю, вы хотите str.get_dummies:

df = pd.DataFrame([['|1|2|3|'], ['|6|4|3|'], ['|6|1|']], columns=['text'])

print(df['text'].str.get_dummies().astype(bool))

Выход:

       1      2      3      4      6
0   True   True   True  False  False
1  False  False   True   True   True
2   True  False  False  False   True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...