Заменить pandas iterrows на векторизацию / применить - PullRequest
1 голос
/ 19 апреля 2020

Рассмотрим следующий пример, где я прохожу каждую строку, делю их на две выборки и выполняю статистический тест для каждой строки:

    for index, row in data.iterrows():
        stat, p = mannwhitneyu(row.iloc[:self.neighbors], row.iloc[self.neighbors:], alternative = 'greater')
        data.loc[index, 'stat'] = stat
        data.loc[index, 'prob'] = p

Есть ли способ ускорить это? Я видел, что «Применить» или «Векторизация» должны улучшить его, но я не знаю, как это можно реализовать в зависимости от того, чего я пытаюсь достичь, поскольку мне нужно выполнить один и тот же ряд за строкой.

Спасибо Вам за помощь!

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете применить к строкам, если вы укажете axis=1. В вашем случае это будет примерно так:

def change_value(row):
    stat, p = mannwhitneyu(row.iloc[:self.neighbors], row.iloc[self.neighbors:], 
    alternative = 'greater')
    row['stat'] = stat
    row['prob'] = p

#Assuming your dataframe is called df
df.apply(change_value, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...