для оптимизации цикла для фрейма данных - PullRequest
0 голосов
/ 10 февраля 2019

На основании значения строки моего исходного кадра данных мне нужно изменить другое значение строки данных.Этот код работает, но время выполнения очень велико.

Я попытался использовать несколько форм цикла и функций (iterrows, iteritems, apply), но это не помогло.

Вот мой код:

%%timeit
for value in tqdm(range(len(data['DPS_NUM']))):
    for col_nm in ts_col:
        temp = data[col_nm][value]
        if temp != '':
            data2[temp][value] = 1

Исходный фрейм данных:

col1 col2 col3 col4
123  foo  bar  zoo
456  bar  foo
789  zoo  zoo

Ожидаемый фрейм данных:

col1 foo bar zoo
123   1   1   1
456   1   1   1
789           1

Мой код работает, но он медленный, мне нужно его оптимизировать.

1 Ответ

0 голосов
/ 10 февраля 2019

Используйте get_dummies и агрегируйте max по столбцам:

#if first column is index
df = pd.get_dummies(df, prefix ='', prefix_sep='').max(axis=1, level=0)
print (df)
      bar  foo  zoo
col1               
123     1    1    1
456     1    1    0
789     0    0    1


#if first column is not index
#df = pd.get_dummies(df.set_index('col1'), prefix ='', prefix_sep='').max(axis=1, level=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...