[英]Floating point comparison not working on pandas groupby output
我遇到了熊猫对行进行过滤的问题。 我正在尝试滤除权重总和不等于1的球队。
dfteam
Team Weight
A 0.2
A 0.5
A 0.2
A 0.1
B 0.5
B 0.25
B 0.25
dfteamtemp = dfteam.groupby(['Team'], as_index=False)['Weight'].sum()
dfweight = dfteamtemp[(dfteamtemp['Weight'].astype(float)!=1.0)]
dfweight
Team Weight
0 A 1.0
我不确定此输出的原因。 我应该得到一个空的数据框,但它甚至给我A团队以为1。
您是浮点错误的受害者 。 第一个值的总和不等于1.0
df.groupby('Team').Weight.sum().iat[0]
0.99999999999999989
您可以改用np.isclose
解决此问题-
np.isclose(df.groupby('Team').Weight.sum(), 1.0)
array([ True, True], dtype=bool)
并对此数组进行过滤。 或者,按照@ayhan的建议,使用groupby
+ filter
-
df.groupby('Team').filter(lambda x: not np.isclose(x['Weight'].sum(), 1))
Empty DataFrame
Columns: [Team, Weight]
Index: []
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.