Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 04.11.2022
Сообщений: 3
1

Замена пропусков на медиану

05.11.2022, 23:28. Показов 2789. Ответов 4

Author24 — интернет-сервис помощи студентам
Имеется массив:
Python
1
a = np.array([[np.nan,2,3,4,5], [6,7,np.nan,9,10], [11,12,np.nan,np.nan,15], [np.nan,np.nan,18,19,np.nan], [21,22,23,np.nan,np.nan]])
Подскажите, пожалуйста, как заменить пропуски медианой, рассчитанной для каждой строки?
В итоге должен получиться массив:
Python
1
a = np.array([[3.5,2,3,4,5], [6,7,8,9,10], [11,12,12,12,15], [17.5,17.5,18,19,17.5], [21,22,23,22,22]])
P.S. Вместо массива numpy можно использовать Pandas DataFrame.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2022, 23:28
Ответы с готовыми решениями:

Замена пропусков по определенному условию
Добрый день! Помогите пожалуйста как можно заменить пропуски у такого датафрейма:...

IN без пропусков
Добрый день! Подскажете есть вопрос вида: SELECT summary, test FROM detail WHERE id IN (55, 34)...

БД для регистрации пропусков
Здравствуйте, передо мной встала задача написать БД для регистрации пропусков, решил реализовать её...

Чтение пропусков в данных
Добрый день, Есть ряд данных, который разбит на столбцы. К сожалению, иногда возникают пропуски....

Система электронных пропусков
Есть небольшие устройства с источником питания + парой светодиодов, мы собираемся их использовать...

4
982 / 326 / 79
Регистрация: 10.04.2012
Сообщений: 1,219
Записей в блоге: 2
06.11.2022, 00:13 2
Лучший ответ Сообщение было отмечено Igor1987 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
a = np.array([[np.nan,  2.,  3.,  4.,  5.],
              [ 6.,  7., np.nan,  9., 10.],
              [11., 12., np.nan, np.nan, 15.],
              [np.nan, np.nan, 18., 19., np.nan],
              [21., 22., 23., np.nan, np.nan]])
print('Исходный массив')
print(a)
b = np.nanmedian(a, axis=1) 
print('\nМедианы по строкам: ', b)
 
inds = np.where(np.isnan(a)) # Индексы NaN
a[inds] = np.take(b, inds[0]) # Замена по строкам, inds[1] - замена по колонкам
print('\nРезультат')
print(a)
2
0 / 0 / 0
Регистрация: 04.11.2022
Сообщений: 3
06.11.2022, 09:09  [ТС] 3
Спасибо, работает!
А как сделать то же самое, если вместо массива numpy задан pandas dataframe, без преобразования dataframe в numpy?
Python
1
2
3
4
5
6
import pandas as pd
df = pd.DataFrame({'col1': [np.nan, 6, 11, np.nan, 21], 
                   'col2': [2, 7, 12, np.nan, 22],
                   'col3': [3, np.nan, np.nan, 18, 23],
                   'col4': [4, 9, np.nan, 19, np.nan],
                   'col5': [5, 10, 15, np.nan, np.nan]})
0
982 / 326 / 79
Регистрация: 10.04.2012
Сообщений: 1,219
Записей в блоге: 2
06.11.2022, 12:46 4
Igor1987, пришлось применить транспонирование, наверное должен быть способ проще
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import numpy as np
 
N = np.nan
df = pd.DataFrame([[N,  2,  3,  4,  5],
                   [6,  7,  N,  9, 10],
                   [11, 12, N,  N, 15],
                   [N,  N,  18, 19, N],
                   [21, 22, 23, N,  N]],
                 columns = list('ABCDE'))
 
print('Исходный массив')
print(df)
 
b = df.median(axis=1) 
print('\nМедианы по строкам: ', list(b))
 
print('\nРезультат')
print(df.T.fillna(b).T)
1
Эксперт Python
4305 / 1856 / 331
Регистрация: 18.01.2021
Сообщений: 3,423
06.11.2022, 14:30 5
Python
1
df = df.apply(lambda x: x.fillna(x.median()), axis=1)
Добавлено через 1 минуту
Код
      A     B     C     D     E
0   3.5   2.0   3.0   4.0   5.0
1   6.0   7.0   8.0   9.0  10.0
2  11.0  12.0  12.0  12.0  15.0
3  18.5  18.5  18.0  19.0  18.5
4  21.0  22.0  23.0  22.0  22.0
2
06.11.2022, 14:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2022, 14:30
Помогаю со студенческими работами здесь

таблица без пропусков
Здравствуйте! Есть таблица, некоторые строчки в которой пустые. Мне нужно дублировать эту...

учет пропусков занятий
учет пропусков занятий. помогите мне, как сделать таблицу:( завтра надо приготовку

Заполнение пропусков на графике
Друзья, доброго дня! Не могу найти готового решения в интеренете - может кто знает как исправить...

Определить количество пропусков
дан файл ФИО и матрица пропусков по дням: сентябрь ............ октябрь .............. ноябрь...

Заполнение пропусков нулями в файле
Есть текстовый файл. Данные в нем записаны так: 10 23 1 45 3 46 2 10 7 11...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru