在通过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
方法时,更大版本的熊猫的功能是否有变化?
希望对此有任何专家的评论,它可能在那里,但目前似乎不在我的脑海。
参考问题goes here
答案 0 :(得分:3)
每What's New in Pandas v0.22.0(我的重点):
Pandas 0.22.0更改了对空和全不适用金额和产品的处理。总结是
- 一个空或全NA序列的总和现在为0
- 空白或全NA系列的乘积现在为1
某些背景:在熊猫0.21中,我们根据是否安装了瓶颈修复了所有NA系列的返回值长期存在的不一致问题。参见Sum/Prod of all-NaN or empty Series/DataFrames is now consistently NaN。同时,我们将空系列的和和prod也更改为NaN。 在v0.21.0中,空序列或全NA系列的总和为NaN 。
所以在v.0.22.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。