我正在练习使用带有 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')
我做错了什么?
答案 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 对象。