Pandas возвращает другой результат, используя fillna () с sum () в более крупных версиях, чем 0.21.0

1

Просматривая вопрос о SO и моделируя ответ, я обнаружил странное поведение между версией Pandas 0.21.0

При использовании fillna вместе с sum() для столбцов он работает по желанию. Однако результат 0.0 выше версии 0.21.0.

Структура DataFrame:

>>> df = pd.DataFrame({'PlaceTest':[21,21,22,22], 'Approved':[1,0,1,0]})
>>> df
   PlaceTest  Approved
0         21         1
1         21         0
2         22         1
3         22         0

Создание нового столбца с помощью groupby при использовании sum()..

>>> df['Not Approved'] = df.groupby('PlaceTest')['Approved'].sum()
>>> df
   PlaceTest  Approved  Not Approved
0         21         1           NaN
1         21         0           NaN
2         22         1           NaN
3         22         0           NaN

Теперь, используя версию 0.21.0 он получает желаемый результат следующим образом:

>>> df = df.groupby('PlaceTest')['Approved', 'Not Approved'].sum().fillna("1").reset_index()

>>> df
   PlaceTest  Approved Not Approved
0         21         1            1
1         22         1            1

Однако при использовании такого же подхода с версией 0.23.3.

>>> df.groupby('PlaceTest')['Approved', 'Not Approved'].sum().fillna("1").reset_index()
   PlaceTest  Approved  Not Approved
0         21         1           0.0
1         22         1           0.0

Есть ли какое-либо изменение функциональности над большей версией панд при использовании sum() вместе с методом fillna?

Поблагодарите любые комментарии экспертов по этому поводу, возможно, они есть, но, похоже, сейчас на моей голове.

Здесь идет справочный вопрос

Теги:
pandas
python-3.x

1 ответ

3
Лучший ответ

Per What New в Pandas v0.22.0 (мой акцент):

Pandas 0.22.0 изменяет обработку пустых и все-NA сумм и продуктов. Резюме состоит в том, что

  • Сумма пустой или все-NA-серии теперь равна 0
  • Произведение пустой или все-NA серии теперь 1

Некоторая предыстория: в pandas 0.21 мы зафиксировали давнюю несогласованность в возвращаемом значении серии all-NA в зависимости от того, было ли установлено узкое место. См. Sum/Prod из всех NaN или пустой серии /DataFrames теперь последовательно NaN. В то же время мы изменили сумму и произведение пустой серии, также являющейся NaN. В v0.21.0 сумма пустой или все-NA-серии была NaN.

Так в версии 2.0.2.0 или новее:

In [16]: df.groupby('PlaceTest')['Approved', 'Not Approved'].sum()
Out[16]: 
           Approved  Not Approved
PlaceTest                        
21                1           0.0
22                1           0.0

тогда как в v0.21.0:

In [16]: df.groupby('PlaceTest')['Approved', 'Not Approved'].sum()
Out[16]: 
           Approved  Not Approved
PlaceTest                        
21                1           NaN
22                1           NaN

Таким образом, в первом случае fillna("1") ничего не делает, поскольку NaN не заполняются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню