Pandas 在大于 0.21.0 的版本上使用 fillna() 和 sum() 返回不同的结果

在通过 SO 问题和模拟答案时,我发现 Pandas 版本之间存在奇怪的行为 0.21.0


在使用fillna以及sum()它的工作原理是所需但是一个列,它导致0.0以上版本0.21.0。


数据帧结构:


>>> 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

现在,在使用 version 时,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

但是,对 version 使用相同的方法时没有结果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方法一起使用时,与更高版本的熊猫相比,功能是否有任何变化?


希望对此有任何专家评论,它可能在那里,但目前似乎不在我的脑海中。


叮当猫咪
浏览 279回答 1
1回答

PIPIONE

根据Pandas v0.22.0 的新增功能(我的重点):Pandas 0.22.0 更改了对空和全 NA 总和和产品的处理。总结就是空的或全 NA 系列的总和现在是 0空的或全 NA 系列的产品现在是 1一些背景:在 pandas 0.21 中,我们修复了全 NA 系列的返回值中长期存在的不一致问题,具体取决于是否安装了瓶颈。请参阅全 NaN 或空 Series/DataFrames 的 Sum/Prod 现在始终为 NaN。同时,我们将空系列的 sum 和 prod 也更改为 NaN。在 v0.21.0 中,空或全 NA 系列的总和是 NaN。所以在 v.0.22.0 中:In [16]: df.groupby('PlaceTest')['Approved', 'Not Approved'].sum()Out[16]:            Approved  Not ApprovedPlaceTest                        21                1           0.022                1           0.0而在 v0.21.0 中:In [16]: df.groupby('PlaceTest')['Approved', 'Not Approved'].sum()Out[16]:            Approved  Not ApprovedPlaceTest                        21                1           NaN22                1           NaN因此,在前一种情况下fillna("1")什么都不做,因为没有要填充的 NaN。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python