Как заменить 3 самых больших значения, отсортированные по индексу в столбце - PullRequest
0 голосов
/ 21 января 2019

У меня простой вопрос, но я боролся с ответом. У меня есть DataFrame, из которого я хочу заменить 3 самых больших значения их 7-дневными скользящими средними, но в порядке индекса. Так для DataFrame, как этот:

Sales
 2
 4
 6
 8
 10
 12
 14
 100
 100
 200

Я хочу заменить сначала две строки 100 в Sales, а затем строку 200. Я попробовал следующее:

df.Sales.replace(df.Sales.nlargest(3).sort_index(),df.Sales.rolling(window=7).mean())

Но это приводит к следующей ошибке:

AttributeError: у объекта 'numpy.float64' нет атрибута 'replace'

Я знаю, что это работает:

df.Sales.replace(df.Sales.max(),df.Sales.rolling(window=7).mean())

И я мог бы сделать это 3 раза, но у меня проблема в том, что он сначала заменит 200, а затем и другие, так что это не совсем то, что мне нужно.

Я думаю, что-то вроде этого будет работать:

for i in df.Sales.nlargest(3).sort_index():
    df.Sales.replace(i, df.Sales.rolling(window=7)

Но я бы предпочел избегать петель. Является ли это возможным?

РЕДАКТИРОВАТЬ: ожидаемый результат будет:

Sales
 2
 4
 6
 8
 10
 12
 14
 8
 8.86
 9.55

Другими словами, замена первых 100 на среднее значение от 2 до 14, что составляет 8. Затем замена вторых 100 на среднее значение от 4 до второго 8, что составляет 8,86 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...