Pandas groupby удаляет столбцы группы после заполнения в 1.1.0 - PullRequest
1 голос
/ 05 августа 2020

У меня есть фрагмент кода 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 , и я не могу найти никаких замечаний по поводу этого изменения.

Вопросы:

  1. Это ошибка в Pandas или я полагаюсь на неопределенное поведение?
  2. Есть ли более естественный способ express этого?

Вопросы, которые вы можете задать:

  1. Почему бы не использовать fillna без a groupby?

    В этом примере первая строка с bk2 не имеет цены, но не имеет смысла заполнять ее предыдущей строкой, которая является ценой bk1.

  2. Зачем использовать ffill вместо удаления значений NA?

    Мой настоящий код работает с данными таймсерий, а ffill - это мо st естественный путь к express продвижению последнего известного наблюдения.

1 Ответ

1 голос
/ 05 августа 2020

Обходной путь

Groupby может быть выражен как:

df = grouped.apply(lambda df: df.fillna(method='ffill'))

Это будет работать в обеих версиях.

Причина

Эта проблема потенциально потенциально связанных с этим изменением, хотя оно произошло в другой версии:

Методы ffill, bfill, pad и backfill из DataFrameGroupBy ранее включали метки групп в возвращаемое значение, несовместимое с другими преобразованиями groupby. Теперь возвращаются только заполненные значения. (GH21521)

( Источник .)

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