У меня есть фрагмент кода pandas, который работал в версии 1.0.5. Вот упрощенный, самодостаточный пример моей проблемы:
import pandas as pd
df = pd.DataFrame(data=[
('bk1', 10),
('bk1', None),
('bk1', 13),
('bk1', None),
('bk2', None),
('bk2', 14),
('bk3', 12),
('bk3', None),
], columns=('book', 'price'))
grouped = df.groupby(['book'], as_index=False, sort=False)
df = grouped.fillna(method='ffill')
print(df)
В этом примере у нас есть список продаж книг, в котором отсутствуют некоторые цены. Мы пытаемся заполнить недостающие данные, используя предыдущую строку, где эта строка представляет собой ту же книгу.
В Pandas 1.0.5 это создает фрейм данных с двумя столбцами:
book price
0 bk1 10.0
1 bk1 10.0
2 bk1 13.0
3 bk1 13.0
4 bk2 NaN
5 bk2 14.0
6 bk3 12.0
7 bk3 12.0
В Pandas 1.1.0 это удаляет столбец книги, что делает вывод непригодным для использования.
price
0 10.0
1 10.0
2 13.0
3 13.0
4 NaN
5 14.0
6 12.0
7 12.0
Я прочитал примечания к патчу для версии 1.1.0 , и я не могу найти никаких замечаний по поводу этого изменения.
Вопросы:
- Это ошибка в Pandas или я полагаюсь на неопределенное поведение?
- Есть ли более естественный способ express этого?
Вопросы, которые вы можете задать:
Почему бы не использовать fillna без a groupby?
В этом примере первая строка с bk2 не имеет цены, но не имеет смысла заполнять ее предыдущей строкой, которая является ценой bk1.
Зачем использовать ffill вместо удаления значений NA?
Мой настоящий код работает с данными таймсерий, а ffill - это мо st естественный путь к express продвижению последнего известного наблюдения.