Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2018 16:30:37

blind_enemy
Зарегистрирован: 2018-05-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться в решении задач

Доброго времени суток!

Не могу разобраться как решить задачу. Видимо не хватает понимания как работают некоторые функции, либо запаса знаний по функциям не хватает.

Имеем следующие данные (подгружено из .csv):
A - Вид товара
B - Название магазина
C - наценка (%)

Необходимо заменить в датафрейме пустые (NaN) значения в колонке C с учетом следующих правил:
-если в данном магазине, в среднем, C >10%, то значения меняем на среднее по магазину
-в ином случае меняем на медиану по магазину

Изначально идея была следующей - создать новые колонки с нужными значениями.
Нашел в сети следующее решение:
df = df.groupby()\
.transform(lambda x: x.fillna(x.mean()))

Но оно не работает, пишет: AttributeError: ‘function’ object has no attribute ‘groupby’

Что делаю не так?

Офлайн

#2 Май 27, 2018 11:27:08

blind_enemy
Зарегистрирован: 2018-05-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться в решении задач

Может кто подскажет иной вариант решения, более прямолинейный?

Офлайн

#3 Май 27, 2018 13:46:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите разобраться в решении задач

Постановка задачи неясна.
Медиану

blind_enemy
-если в данном магазине, в среднем, C >10%
Что значит в среднем? По количеству пунктов среднем, среднее значение по ценникам, или среднее с учетом запасов на складе?
Они должны совпадать со средним до присвоения или после или после добавления каждого нового товара надо пересчитывать среднее?



Офлайн

#4 Май 27, 2018 14:24:54

blind_enemy
Зарегистрирован: 2018-05-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться в решении задач

doza_and
Постановка задачи неясна.Медиану
В уже прописанных данных.

На примере покажу что хотят.

Магазин Наценка
М-Видео 10%
М-Видео 20%
М-Видео NaN
М-Видео NaN

Взаместо NaN необходимо подставить среднее от уже проставленных (10+20)/2=15% так как среднее >10%

Если бы было

Магазин Наценка
М-Видео 5%
М-Видео 3%
М-Видео NaN
М-Видео NaN

То ставили бы медиану.

Т.е. зря я назвал колонку А т.к. она только путает

Отредактировано blind_enemy (Май 27, 2018 15:01:42)

Офлайн

#5 Май 27, 2018 22:59:58

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите разобраться в решении задач

blind_enemy
иной вариант решения, более прямолинейный?
ну мне кажется индексы использовать
 import pandas as pd 
ds = pd.read_csv("a.csv")
idx = ds.b.isna()
m=ds.b.mean()
ds.b[idx] = m



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version