Nano Hash - криптовалюты, майнинг, программирование

как оптимизировать эти функции pandas?

train["gender"] = train.apply(lambda x: 1 if x["gender"] == "F" else 0, axis=1) 
train["car"] = train.apply(lambda x: 1 if x["car"] == "Y" else 0, axis=1) 
train["reality"] = train.apply(lambda x: 1 if x["reality"] == "Y" else 0, axis=1) 

эти 3 кода требуют много времени, даже если это простое изменение.
Я думаю, доступ к каждой строке 3 раза делает неэффективным. Итак, если я могу сделать 1 доступ к строке и применить изменение функции 3 данных, это может быть быстрее в 2-3 раза, чем сейчас.

как.....

# it is my imaginary code. not works
train[["gender","car", "reality"]] =  train.apply(lambda x: 1 if x["gender"] == "F" else 0, axis=1,
                                                  lambda y: 1 if y["car"] == "Y" else 0, axis=1,
                                                  lambda z: 1 if z["reality"] == "Y" else 0, axis=1) 

Как можно оптимизировать эти коды?

=========================== результат теста для tdy

введите здесь описание изображения

07.04.2021

Ответы:


1

Вы можете попробовать 3 раза np.where() что является обычно самым быстрым вариантом:

train['gender'] = np.where(train.gender == 'F', 1, 0)
train['car'] = np.where(train.car == 'Y', 1, 0)
train['reality'] = np.where(train.reality == 'Y', 1, 0)

Или 2x np.where(), что немного медленнее:

train['gender'] = np.where(train.gender == 'F', 1, 0)
train[['car', 'reality']] = np.where(train[['car', 'reality']] == 'Y', 1, 0)

Тайминги с 10 миллионами строк:

method %timeit
3x np.where() 152 ms ± 8.86 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
2x np.where() 198 ms ± 39.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
3x apply() 8.91 s ± 495 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
07.04.2021
  • о, я попробую это. Но я думаю, что это решение также имеет ту же проблему. Доступ к каждой строке 3 раза 07.04.2021
  • @LaserCho Я отредактировал ответ, чтобы объединить car и reality. Я не знаю, как включить все 3 сразу, так как gender имеет другое условие. 07.04.2021
  • очень интересно. ваш оригинальный ответ np.where 3 раза быстрее всего. и второй - текущий ответ. мое первоначальное 3-кратное применение было самым медленным. самый быстрый способ быстрее второго почти в 16 раз. и второй текущий ответ быстрее моего кода в 35 раз. 07.04.2021
  • @LaserCho Я добавил еще один вариант, чтобы сделать все за один раз, но я не уверен, что это действительно быстрее. 07.04.2021
  • Сотрите это, некоторые ошибки в нем я не понял. 07.04.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..