Я очень новичок в пандах и не могу решить эту проблему самостоятельно. У меня есть цены на фреймворк данных, а вот цены.tail(5):
теперь я запускаю этот код:
prices['dollar_vol'] = (prices
.groupby('ticker',
group_keys=False,
as_index=False)
.dollar_vol
.rolling(window=21)
.mean()
.fillna(0)
.reset_index(level=0, drop=True))
и теперь доллар_vol заполнен NaN. вот цены.хвост(5)
Я работаю в Google Colab. Он работал правильно месяц назад и внезапно перестал работать. Пожалуйста помоги.
Я сделал это, и для индекса price.groupby() это только тикер. Не тикер, а дата. Так как бы вы предложили мне исправить это?
Убедитесь, что ваш prices
отсортирован с помощью ticker
, а затем date
с
prices.sort_index(inplace=True)
И затем вы можете передать базовый массив numpy:
prices['dollar_vol'] = (prices
.groupby('ticker') # no need for other stuff
.dollar_vol
.rolling(window=21)
.mean()
.fillna(0)
.to_numpy() ) # the numpy array
Другой способ — использовать transform
без необходимости сортировки:
prices['dollar_vol'] = (prices
.groupby('ticker') # no need for other stuff
.dollar_vol
.transform( lambda x: x.rolling(window=21)
.mean().fillna(0)
)
)
Спасибо, это решило проблему. Не могли бы вы объяснить, почему? Или укажите мне на материал, чтобы я мог лучше понять проблему. Спасибо.
Если вы передадите серию для назначения серии/столбца, Pandas выровняет индекс. Таким образом, данные серии могут быть переупорядочены/удалены/добавлены, когда два индекса не выровнены. Если вы передаете список/np.array, необработанные данные передаются в этом порядке. Вот почему вам нужно убедиться, что данные указаны в правильном порядке.
@user1272913 user1272913 также смотрите обновленный ответ для другого варианта. Обратите внимание, что transform
на лямбда-функции немного медленнее, чем предыдущий подход.
распечатайте свои
prices.groupby()...
штучки, и вы увидите, что данные имеют другой индекс, чемprices