
🌸 Майская распродажа
Скидки до 70% в каталоге + дополнительно 3,5% по промокоду 75D80F4B
В каталог
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- Нативный
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
13 706.28₽13 706.28₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
imageИзображение не доступно для предпросмотра
PyTorch представил MetaShuffling — решение для ускорения вывода в Llama 4 MoE, которое решает проблемы динамизма и разреженности моделей, связанных с маршрутизацией токенов. Вместо традиционных методов
padding
или slicing
, MetaShuffling использует переупорядочивание токенов по экспертам, избавляясь от ненужных операций и синхронизации между CPU и GPU. Это снижает использование памяти и устраняет задержки, связанные с обработкой «пустышек» или множественными запусками ядер.В основе решения - идея группировки токенов, назначенных одному эксперту, в непрерывные блоки. Такой подход позволяет использовать dense tensors вместо разреженных структур, сохраняя статичные формы данных.
Благодаря этому MetaShuffling совместим с механизмами графов (
CUDAGraph
, torch.compile
), которые ускоряют исполнение, избегая повторных синхронизаций. Решение особенно эффективно для Llama 4, где каждый MoE-слой активирует лишь часть экспертов, что на практике создает динамические нагрузки.GroupedGEMM
, написанный на Triton, обрабатывает несколько матриц в одном вызове, используя статические и динамические разбиения размеров, позволяя пропускать неактивных экспертов и «лишние» токены без дополнительных затрат.IndexShuffling
, в свою очередь, выполняет сортировку токенов и подсчет их количества на каждом эксперте за один проход, что по тестам оказалось в 5–13 раз быстрее, чем стандартные реализации PyTorch.Результаты экспериментов на H100 80GB выглядят многообещающими.
Prefill Llama 4 Maverick с FP8 GroupedGEMM достигает 1,197 TFlops при 286 мкс, что близко к теоретическому пределу GPU.
В задачах декодирования метрики также демонстрируют высокую эффективность: 44,88 TFlops за 59 мкс. Даже при малом количестве токенов (128) MetaShuffling показывает 80% использования пропускной способности памяти.
Для multi-host сценариев MetaShuffling предлагает гибкость между «динамическими» и «статичными» формами данных. В режиме
eager
(без графов) используется минимальное заполнение без синхронизации CPU-GPU.В
graph mode
— статичные формы с минимальным паддингом, что сокращает сетевой трафик и память. Также реализована дедупликация коммуникаций, которая распределяет нагрузку между узлами, снижая задержки в распределенных вычислениях.MetaShuffling поддерживает интеграцию с FBGEMM Generative AI Kernel Library, позволяя применять оптимизации для vLLM и SGLang.
@ai_machinelearning_big_data
#AI #ML #MetaShuffling #Pytorch
868
10:04
15.05.2025
imageИзображение не доступно для предпросмотра
from skorch import NeuralNetClassifier
model = NeuralNetClassifier(
module=MyClassifier, # Класс модели на PyTorch
lr=0.001, # Скорость обучения
batch_size=64, # Размер батча
criterion=nn.CrossEntropyLoss, # Функция потерь
optimizer=optim.Adam # Оптимизатор
)
Здесь создаётся обёртка NeuralNetClassifier, которая делает модель PyTorch совместимой с .fit(), .predict() и другими методами Sklearn.
📌Обучение:
model.fit(X_train, y_train)
Ты обучаешь модель так же, как и в Sklearn. Это удобно и не требует написания собственного цикла обучения.
С помощью Skorch ты получаешь:
- удобный Sklearn-подобный API для PyTorch-моделей;
- автоматический вывод метрик обучения;
- лёгкую интеграцию с GridSearchCV, Pipeline и другими инструментами Scikit-learn.
https://github.com/skorch-dev/skorch
@machinelearning_interview
2200
12:02
13.05.2025
imageИзображение не доступно для предпросмотра
🦙 Мультимодальная поддержка в llama.cpp (обновление)
llama.cpp теперь поддерживает мультимодальные модели с визуальным вводом!
📦 Что нового
Проект
🔧 Ключевые возможности
• Поддержка моделей с вводом изображения (image + text)
• Новый CLI:
• Расширена совместимость: поддержка GGUF-моделей мультимодального типа
• Локальная работа на CPU и GPU без зависимости от облачных API
🚀 Как использовать
1. Скачай модель в формате
https://huggingface.co/liuhaotian/llava-v1.5-13b-GGUF
2. Подготовь изображение (например, `photo.jpg`)
3. Запусти CLI:
▪ GitHub
llama.cpp теперь поддерживает мультимодальные модели с визуальным вводом!
📦 Что нового
Проект
llama.cpp
теперь поддерживает *мультимодальные модели* — такие как LLaVA 1.5 / 1.6, BakLLaVA, Obsidian, MobileVLM и другие, позволяя выполнять вывод, совмещающий текст и изображения локально, без облака.🔧 Ключевые возможности
• Поддержка моделей с вводом изображения (image + text)
• Новый CLI:
llama-mtmd-cli
(заменяет `llava-cli`) • Расширена совместимость: поддержка GGUF-моделей мультимодального типа
• Локальная работа на CPU и GPU без зависимости от облачных API
🚀 Как использовать
1. Скачай модель в формате
.gguf
, например LLaVA:https://huggingface.co/liuhaotian/llava-v1.5-13b-GGUF
2. Подготовь изображение (например, `photo.jpg`)
3. Запусти CLI:
./build/bin/llama-mtmd-cli \
-m models/llava-v1.5-13b.gguf \
--image ./photo.jpg \
-p "Что изображено на фото?"
▪ GitHub
2400
11:20
12.05.2025
imageИзображение не доступно для предпросмотра
Начните свой путь в ML для финансового анализа — два бесплатных вебинара
🎓 Урок 1: Технический анализ финансовых рынков: графики и индикаторы: https://otus.pw/CDS6/
Углубитесь в методы технического анализа, научитесь читать графики, распознавать тренды и использовать индикаторы для генерации торговых сигналов.
🎓 Урок 2: Построение торгового агента на базе алгоритмов обучения с подкреплением: https://otus.pw/CDS6/
Разработайте своего первого торгового агента, использующего обучение с подкреплением. Этот урок позволит вам применить современные методы искусственного интеллекта для автоматизации торговых стратегий.
➡️ Регистрируйтесь на бесплатные уроки, чтобы ознакомиться с форматом обучения и получить скидку на курс «ML для финансового анализа»: https://otus.pw/CDS6/?erid=2W5zFJBnSdE
#реклама
О рекламодателе
🎓 Урок 1: Технический анализ финансовых рынков: графики и индикаторы: https://otus.pw/CDS6/
Углубитесь в методы технического анализа, научитесь читать графики, распознавать тренды и использовать индикаторы для генерации торговых сигналов.
🎓 Урок 2: Построение торгового агента на базе алгоритмов обучения с подкреплением: https://otus.pw/CDS6/
Разработайте своего первого торгового агента, использующего обучение с подкреплением. Этот урок позволит вам применить современные методы искусственного интеллекта для автоматизации торговых стратегий.
➡️ Регистрируйтесь на бесплатные уроки, чтобы ознакомиться с форматом обучения и получить скидку на курс «ML для финансового анализа»: https://otus.pw/CDS6/?erid=2W5zFJBnSdE
#реклама
О рекламодателе
2100
09:19
12.05.2025
imageИзображение не доступно для предпросмотра
Начните свой путь в ML для финансового анализа — два бесплатных вебинара
🎓 Урок 1: Технический анализ финансовых рынков: графики и индикаторы: https://otus.pw/CDS6/
Углубитесь в методы технического анализа, научитесь читать графики, распознавать тренды и использовать индикаторы для генерации торговых сигналов.
🎓 Урок 2: Построение торгового агента на базе алгоритмов обучения с подкреплением: https://otus.pw/CDS6/
Разработайте своего первого торгового агента, использующего обучение с подкреплением. Этот урок позволит вам применить современные методы искусственного интеллекта для автоматизации торговых стратегий.
➡️ Регистрируйтесь на бесплатные уроки, чтобы ознакомиться с форматом обучения и получить скидку на курс «ML для финансового анализа»: https://otus.pw/CDS6/?erid=2W5zFJBnSdE
#реклама
О рекламодателе
🎓 Урок 1: Технический анализ финансовых рынков: графики и индикаторы: https://otus.pw/CDS6/
Углубитесь в методы технического анализа, научитесь читать графики, распознавать тренды и использовать индикаторы для генерации торговых сигналов.
🎓 Урок 2: Построение торгового агента на базе алгоритмов обучения с подкреплением: https://otus.pw/CDS6/
Разработайте своего первого торгового агента, использующего обучение с подкреплением. Этот урок позволит вам применить современные методы искусственного интеллекта для автоматизации торговых стратегий.
➡️ Регистрируйтесь на бесплатные уроки, чтобы ознакомиться с форматом обучения и получить скидку на курс «ML для финансового анализа»: https://otus.pw/CDS6/?erid=2W5zFJBnSdE
#реклама
О рекламодателе
2100
09:19
12.05.2025
imageИзображение не доступно для предпросмотра
📝 ML Course Notes — коллекция конспектов по машинному обучению. Этот открытый репозиторий объединяет структурированные заметки по курсам от Стэнфорда, MIT и CMU — от основ нейросетей до трансформеров и RLHF. Здесь можно найти выжимки ключевых идей из лекций Andrew Ng, Кристофера Мэннинга и Андрея Карпати.
Репозиторий будет полезен для тех, кто хочет быстро освежить материал: каждая заметка привязана к конкретному видео и лектору. На страницу проекта можно добавить свои конспекты или улучшить существующие.
🤖 GitHub
@machinelearning_interview
Репозиторий будет полезен для тех, кто хочет быстро освежить материал: каждая заметка привязана к конкретному видео и лектору. На страницу проекта можно добавить свои конспекты или улучшить существующие.
🤖 GitHub
@machinelearning_interview
3300
15:03
10.05.2025
🎲 Задача с подвохом: Монетки и ошибка интуиции
Условие:
У вас есть две монеты:
• Монета A: честная, вероятность выпадения орла = 50%
• Монета B: нечестная, у неё две стороны с орлами (орёл всегда выпадает)
Вы случайным образом выбираете одну монету (с вероятностью 50% каждая) и подбрасываете её один раз. Выпадает орёл.
❓ Вопрос:
Какова вероятность того, что вы выбрали нечестную монету (Монета B)?
🔍 Разбор:
Нам нужна вероятность:
**P(B | O)** — вероятность того, что выбрана Монета B при условии, что выпал орёл.
📈 **Быстрая формула (Байес):**
P(B | O) = (P(O | 😎 * P(B)) / (P(O | A) * P(A) + P(O | 😎 * P(B))
Подставляем:
= (1 * 0.5) / (0.5 * 0.5 + 1 * 0.5)
= 0.5 / 0.75 ≈ 0.6667
✅ Вероятность ≈ 66,7%
💻 **Проверим симуляцией (Python):**
```python
import random
def simulate(n_trials=100_000):
count_B_given_O = 0
count_O = 0
for _ in range(n_trials):
coin = random.choice(['A', 'B']) # выбираем монету
if coin == 'A':
result = random.choice(['H', 'T']) # честная монета
else:
result = 'H' # нечестная монета (всегда орёл)
if result == 'H':
count_O += 1
if coin == 'B':
count_B_given_O += 1
prob = count_B_given_O / count_O
print(f"Симуляция: вероятность P(B | O) ≈ {prob:.4f}")
simulate()
```
Примерный вывод:
```
Симуляция: вероятность P(B | O) ≈ 0.6665
```
💥 **Подвох:**
Многие интуитивно думают, что вероятность остаётся 50%, но факт выпадения орла изменяет наше знание о ситуации — это типичная ошибка игнорирования условной вероятности.
🧠 **Что важно для Data Science:**
• Принцип обновления вероятностей лежит в основе Байесовских моделей
• Ошибки интуиции часто приводят к неправильным выводам при работе с вероятностями
• Симуляция помогает проверять теорию и укреплять понимание статистики
@machinelearning_interview
Условие:
У вас есть две монеты:
• Монета A: честная, вероятность выпадения орла = 50%
• Монета B: нечестная, у неё две стороны с орлами (орёл всегда выпадает)
Вы случайным образом выбираете одну монету (с вероятностью 50% каждая) и подбрасываете её один раз. Выпадает орёл.
❓ Вопрос:
Какова вероятность того, что вы выбрали нечестную монету (Монета B)?
🔍 Разбор:
Нам нужна вероятность:
**P(B | O)** — вероятность того, что выбрана Монета B при условии, что выпал орёл.
📈 **Быстрая формула (Байес):**
P(B | O) = (P(O | 😎 * P(B)) / (P(O | A) * P(A) + P(O | 😎 * P(B))
Подставляем:
= (1 * 0.5) / (0.5 * 0.5 + 1 * 0.5)
= 0.5 / 0.75 ≈ 0.6667
✅ Вероятность ≈ 66,7%
💻 **Проверим симуляцией (Python):**
```python
import random
def simulate(n_trials=100_000):
count_B_given_O = 0
count_O = 0
for _ in range(n_trials):
coin = random.choice(['A', 'B']) # выбираем монету
if coin == 'A':
result = random.choice(['H', 'T']) # честная монета
else:
result = 'H' # нечестная монета (всегда орёл)
if result == 'H':
count_O += 1
if coin == 'B':
count_B_given_O += 1
prob = count_B_given_O / count_O
print(f"Симуляция: вероятность P(B | O) ≈ {prob:.4f}")
simulate()
```
Примерный вывод:
```
Симуляция: вероятность P(B | O) ≈ 0.6665
```
💥 **Подвох:**
Многие интуитивно думают, что вероятность остаётся 50%, но факт выпадения орла изменяет наше знание о ситуации — это типичная ошибка игнорирования условной вероятности.
🧠 **Что важно для Data Science:**
• Принцип обновления вероятностей лежит в основе Байесовских моделей
• Ошибки интуиции часто приводят к неправильным выводам при работе с вероятностями
• Симуляция помогает проверять теорию и укреплять понимание статистики
@machinelearning_interview
3000
11:12
10.05.2025
🧩 Задача для продвинутых дата-сайентистов: "Парадоксальная корреляция"
📖 Описание задачи
У вас есть DataFrame
Результат:
Вам нужно посчитать корреляцию между spend и revenue.
Вы пишете:
И получаете:
❗️Но вы уверены, что данные связаны (чем больше spend, тем больше revenue), а Pandas возвращает NaN.
📝 Ваша задача:
1. Почему Pandas возвращает
2. Как правильно посчитать корреляцию?
3. Как бы вы обработали такие данные в продакшн-пайплайне?
---
🎯 Подвох (ключевой момент):
Метод
В этом DataFrame остаются только строки с индексами 0, 1, 2, 5.
→ На этих данных корреляция может быть рассчитана.
Но главная проблема — тип данных.
Если данные были считаны, например, из CSV, где пустые значения остались строками, то Pandas определит колонку как
Вывод:
И тогда
---
💡 Решение:
1. Проверить типы данных:
```python
print(df.dtypes)
```
2. Привести к числовому типу:
```python
df['spend'] = pd.to_numeric(df['spend'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce')
```
3. Посчитать корреляцию без NaN:
```python
correlation = df[['spend', 'revenue']].dropna().corr().iloc[0, 1]
print(correlation)
```
✅ Теперь корреляция рассчитана корректно.
---
🔥 Дополнительный подвох:
А что если CSV-файл считан с, а данные внутри разделены запятыми?
→ Тогда весь DataFrame будет одной колонкой с типом object, а Pandas не сможет даже начать обработку.
---
📝 Что проверяет задача:
✅ Понимание, как Pandas обрабатывает NaN и object
✅ Внимательность к типам данных
✅ Умение находить ошибки при чтении и парсинге данных
✅ Опыт очистки и предобработки грязных данных
🔥 Отличная проверка на внимательность и глубину работы с Pandas!
📖 Описание задачи
У вас есть DataFrame
df
с данными о рекламных кампаниях:
import pandas as pd
data = {
'campaign_id': [1, 2, 3, 4, 5, 6],
'spend': [1000, 1500, 1200, None, 2000, 1700],
'revenue': [2000, 2300, 2500, 1800, None, 2700]
}
df = pd.DataFrame(data)
print(df)
Результат:
campaign_id spend revenue
0 1 1000.0 2000.0
1 2 1500.0 2300.0
2 3 1200.0 2500.0
3 4 NaN 1800.0
4 5 2000.0 NaN
5 6 1700.0 2700.0
Вам нужно посчитать корреляцию между spend и revenue.
Вы пишете:
correlation = df['spend'].corr(df['revenue'])
print(correlation)
И получаете:
nan
❗️Но вы уверены, что данные связаны (чем больше spend, тем больше revenue), а Pandas возвращает NaN.
📝 Ваша задача:
1. Почему Pandas возвращает
NaN
?2. Как правильно посчитать корреляцию?
3. Как бы вы обработали такие данные в продакшн-пайплайне?
---
🎯 Подвох (ключевой момент):
Метод
corr()
автоматически игнорирует строки, где хотя бы одно значение NaN.В этом DataFrame остаются только строки с индексами 0, 1, 2, 5.
→ На этих данных корреляция может быть рассчитана.
Но главная проблема — тип данных.
Если данные были считаны, например, из CSV, где пустые значения остались строками, то Pandas определит колонку как
object
, а не float64
:
print(df.dtypes)
Вывод:
spend object
revenue object
И тогда
corr()
вернёт NaN, потому что не смог интерпретировать данные как числовые.---
💡 Решение:
1. Проверить типы данных:
```python
print(df.dtypes)
```
2. Привести к числовому типу:
```python
df['spend'] = pd.to_numeric(df['spend'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce')
```
3. Посчитать корреляцию без NaN:
```python
correlation = df[['spend', 'revenue']].dropna().corr().iloc[0, 1]
print(correlation)
```
✅ Теперь корреляция рассчитана корректно.
---
🔥 Дополнительный подвох:
А что если CSV-файл считан с
delimiter=';'
→ Тогда весь DataFrame будет одной колонкой с типом object, а Pandas не сможет даже начать обработку.
---
📝 Что проверяет задача:
✅ Понимание, как Pandas обрабатывает NaN и object
✅ Внимательность к типам данных
✅ Умение находить ошибки при чтении и парсинге данных
✅ Опыт очистки и предобработки грязных данных
🔥 Отличная проверка на внимательность и глубину работы с Pandas!
3300
11:04
07.05.2025
imageИзображение не доступно для предпросмотра
Учитесь в универе и хотите вырваться из рутины? Подайте заявку на бесплатный студкемп Яндекс Образования и НГУ! Здесь вы не просто переключитесь с повседневных задач, а нырнёте в одно из самых перспективных IT-направлений — NLP.
За две недели — с 14 по 26 июля — вы разберётесь, как работают языковые модели вроде YandexGPT и Qwen, поймёте, что такое мультимодальность и RAG, поработаете с реальными данными и создадите собственный проект. На интенсиве ждут студентов со всей России и каждому, кто пройдёт отбор, оплатят проезд и проживание. Успейте подать заявку до 18 мая!
За две недели — с 14 по 26 июля — вы разберётесь, как работают языковые модели вроде YandexGPT и Qwen, поймёте, что такое мультимодальность и RAG, поработаете с реальными данными и создадите собственный проект. На интенсиве ждут студентов со всей России и каждому, кто пройдёт отбор, оплатят проезд и проживание. Успейте подать заявку до 18 мая!
3100
09:03
07.05.2025
🧩 Задача для дата-сайентистов: "Средняя зарплата" (с подвохом)
📖 Описание задачи
У вас есть DataFrame
Результат:
В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.
Вы пишете следующий код:
✅ Код выполняется без ошибок, но когда вы проверяете результат:
Получаете:
✅ Всё вроде бы верно…
Но через неделю приходит заказчик и говорит:
> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»
📝 Вопросы:
1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN
---
🎯 Что проверяет задача:
✅ Понимание, как
✅ Понимание, что
✅ Умение работать с группами, где нет данных
---
💡 Подсказка:
Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).
Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.
---
✅ Ожидаемое правильное решение:
```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)
df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```
Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.
🔥 Дополнительный подвох (для усложнения):
Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?
📝 Вывод:
Эта задача проверяет:
✅ Понимание нюансов заполнения пропусков в Pandas
✅ Внимательность к corner-case ситуациям
✅ Умение работать с группами с частично или полностью отсутствующими данными
🔥 Отличная тренировка внимательности и глубины понимания Pandas!
📖 Описание задачи
У вас есть DataFrame
df
с данными о зарплатах сотрудников компании:
import pandas as pd
data = {
'employee_id': [1, 2, 3, 4, 5, 6],
'department': ['IT', 'IT', 'HR', 'HR', 'Finance', 'Finance'],
'salary': [100000, None, 50000, None, 70000, None]
}
df = pd.DataFrame(data)
print(df)
Результат:
employee_id department salary
0 1 IT 100000.0
1 2 IT NaN
2 3 HR 50000.0
3 4 HR NaN
4 5 Finance 70000.0
5 6 Finance NaN
В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.
Вы пишете следующий код:
df['salary_filled'] = df.groupby('department')['salary'].transform(lambda x: x.fillna(x.median()))
✅ Код выполняется без ошибок, но когда вы проверяете результат:
print(df)
Получаете:
employee_id department salary salary_filled
0 1 IT 100000.0 100000.0
1 2 IT NaN 100000.0
2 3 HR 50000.0 50000.0
3 4 HR NaN 50000.0
4 5 Finance 70000.0 70000.0
5 6 Finance NaN 70000.0
✅ Всё вроде бы верно…
Но через неделю приходит заказчик и говорит:
> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»
📝 Вопросы:
1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN
---
🎯 Что проверяет задача:
✅ Понимание, как
median()
работает на пустой серии ✅ Понимание, что
fillna(np.nan)
может привести к замещению на 0 при приведении типов ✅ Умение работать с группами, где нет данных
---
💡 Подсказка:
Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).
Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.
✅ Ожидаемое правильное решение:
```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)
df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```
Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.
🔥 Дополнительный подвох (для усложнения):
Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?
📝 Вывод:
Эта задача проверяет:
✅ Понимание нюансов заполнения пропусков в Pandas
✅ Внимательность к corner-case ситуациям
✅ Умение работать с группами с частично или полностью отсутствующими данными
🔥 Отличная тренировка внимательности и глубины понимания Pandas!
3300
09:42
06.05.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
6 отзыва за 6 мес.
Превосходно (100%) За последние 6 мес
m
**cromarketing@****.ru
на сервисе с августа 2023
17.04.202511:47
5
Оперативное размещение
Показать еще
Лучшие в тематике
Новинки в тематике
Статистика канала
Рейтинг
62.5
Оценка отзывов
5.0
Выполнено заявок
127
Подписчики:
24.0K
Просмотры на пост:
lock_outline
ER:
7.3%
Публикаций в день:
1.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий