Python错误:布尔序列键将被重新索引以匹配DataFrame索引



我正在Python中进行一个项目,当我下面的代码工作时,我得到了一个可怕的错误:

用户警告:布尔序列键将被重新索引以匹配DataFrame索引。

dummy_types = pd.get_dummies(df_pokemon_co, columns=['Type 1', 'Type 2'])
df_pokemon_co['Rock'] = dummy_types['Type 1_Rock'] + dummy_types['Type 2_Rock']
df_pokemon_co['Ground'] = dummy_types['Type 1_Ground'] + dummy_types['Type 2_Ground']
df_pokemon_co['Water'] = dummy_types['Type 1_Water'] + dummy_types['Type 2_Water']
df_pokemon_co['Sum'] = df_pokemon_co['Rock'] + df_pokemon_co['Ground'] + df_pokemon_co['Water']
print('Total rock:', np.sum(np.any(df_pokemon_co[df_pokemon_co['Sum']==2][df_pokemon_co['Rock']==1], axis=1)))
print('Total ground:', np.sum(np.any(df_pokemon_co[df_pokemon_co['Sum']==2][df_pokemon_co['Ground']==1], axis=1)))
print('Total water:', np.sum(np.any(df_pokemon_co[df_pokemon_co['Sum']==2][df_pokemon_co['Water']==1], axis=1)))

我已经计算出,如果我从打印行中删除以下内容,消息就会消失,但我不太确定如何补救。

[df_pokemon_co['Sum']==2]

有人知道如何解决这个问题吗?我看到了一些与这个错误有关的其他帖子,但在这些情况下,错误似乎是出于不同的原因发布的。

提前感谢:(

如果需要按2个条件计数匹配的值,则按&将它们链起来用于逐位AND,并使用sum用于True的值:

print('Total rock:', ((df_pokemon_co['Sum']==2) & (df_pokemon_co['Rock']==1)).sum())

对于中位数,使用DataFrame.loc按条件和列名进行选择:

med = (df_pokemon_co.loc[(df_pokemon_co['Rock']==1) & 
(df_pokemon_co['Sum']==2), 'Defense'].median())

为了避免多次调用同一掩码,将其分配给变量:

mask1 = (df_pokemon_co['Sum']==2) & (df_pokemon_co['Rock']==1)
print('Total rock:', mask1.sum())
print('Median rock:', df_pokemon_co.loc[mask1, 'Defense'].sum())

最新更新