Python(Pandas)错误'标签[阿尔及利亚]不在[索引]中

Yoh*_*oth 3 python indexing assign pandas

我不明白为什么会这样

df[(df['Gold']>0) & (df['Gold.1']>0)].loc[((df['Gold'] - df['Gold.1'])/(df['Gold'])).abs().idxmax()]
Run Code Online (Sandbox Code Playgroud)

但是当我分开时(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()]
Run Code Online (Sandbox Code Playgroud)

我不明白自从我开始学习Python和Pandas以来发生了什么.我需要了解发生这种情况的原因以及如何解决这个问题.

错误

KeyError:'标签[阿尔及利亚]不在[索引]中

DataFrame snap 在此输入图像描述

jez*_*ael 6

你的问题是boolean indexing:

df[(df['Gold']>0) & (df['Gold.1']>0)]
Run Code Online (Sandbox Code Playgroud)

返回一个过滤后的DataFrame,它不包含您使用此值计算indexmaxSeries:

((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()
Run Code Online (Sandbox Code Playgroud)

在你的数据中Algeria.

所以loc逻辑上抛出一个KeyError.

一个可能的解决办法是赋予新的过滤DataFramedf1,然后得到相应的最大值的指数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()]
Run Code Online (Sandbox Code Playgroud)