我正在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())