执行熊猫计数时出现KeyError

时间:2021-03-22 16:57:35

标签: python python-3.x pandas count

我正在练习使用带有 pokedex 列表的 pandas 模块。我在查找两列时使用 groupby 时遇到问题。它适用于一列,并提供列表中的口袋妖怪数量。像这样添加一列来计算它更容易:

df["Count"] = 1
df.groupby(df["Type 1"]).count()["Count"]

拥有

|Type 1         |
:---------------
|Bug          69|
|Dark         31|
|Dragon       32|
|Electric     44|
|Fairy        17|
|Fighting     27|
|Fire         52|
|Flying        4|
|Ghost        32|
|...            |

但是如果我想在计数中添加类型 2,它会给出错误:

df.groupby(df["Type 1", "Type 2"]).count()["Count"]

给予:

KeyError: ('Type 1', 'Type 2')

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为您对 groupby 函数使用了错误的语法。 试试:

df.groupby(by=["Type 1", "Type 2"]).count()

答案 1 :(得分:1)

您也可以使用:

df.groupby([df["Type 1"], df["Type 2"]]).count()["Count"]

尽管对于这种情况,您可以使用更简单的形式:

df.groupby(["Type 1", "Type 2"]).count()["Count"]

groupby() 不支持传递像 df[["Type 1", "Type 2"]] 这样的多列数据框,但您可以传递系列列表,例如 [ df["Type 1"], df["Type 2"] ] 或简单的 ["Type 1", "Type 2"]

在以下情况下需要在 df 内引用 groupby()

df["Count"].groupby([df["Type_1"], df["Type_2"]]).count()

在这种情况下,简单的形式是无效的:

df["Count"].groupby(["Type_1", "Type_2"]).count()      # invalid

这是因为在这种情况下,使用熊猫系列 df["Count"] 而不是整个数据框 df 来调用 groupby()groupby() 无法识别列 {{1 }} 和 Type 1 因为 Type 2 是正在处理的 Pandas 对象。