我不明白为什么会这样做
df[(df['Gold']>0) & (df['Gold.1']>0)].loc[((df['Gold'] - df['Gold.1'])/(df['Gold'])).abs().idxmax()]
但是当我除以(df['Gold'] + df['Gold.1'] + df['Gold.2'])
时
它停止工作给我错误,你可以在下面找到。
有趣的是,以下行可以使用
df.loc[((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()]
自从我开始学习Python和Pandas以来,我不明白发生了什么。我需要了解发生这种情况的原因以及解决方法。
ERROR
KeyError:'标签[Algeria]不在[index]'
答案 0 :(得分:6)
您的问题是boolean indexing
:
df[(df['Gold']>0) & (df['Gold.1']>0)]
返回一个过滤后的DataFrame,该数据框不包含您使用此计算的index
max
值Series
:
((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()
在您的数据中,它是Algeria
。
所以loc
逻辑上会抛出KeyError
。
一种可能的解决方案是将新过滤的DataFrame
分配给df1
,然后使用Series
获取与idxmax
的最大值对应的索引:
df1 = df[(df['Gold']>0) & (df['Gold.1']>0)]
df2 = df1.loc[((df1['Gold']-df1['Gold.1'])/(df1['Gold']+df1['Gold.1']+df1['Gold.2'])).abs().idxmax()]