熊猫中的过滤器-为什么不起作用?

时间:2020-09-23 11:27:01

标签: python pandas dataframe pandas-groupby

这是一个基本问题,因此请您提前道歉。

我正在使用Pandas,并且通过以下行对数据进行分组:

page_serp_df.groupby([page_serp_df.meta_keywords_1_length]).count()['keyword']

这是指以下内容:

  • 数据框: [page_serp_df]
  • 按列分组: meta_keywords_1_length
  • 使用过滤器进行计数:关键字

我不明白为什么过滤条件必须为 ['keyword'] ,即用引号引起来的字符串? 例如,这行不通,对我来说是很不直观的:

page_serp_df.groupby([page_serp_df.meta_keywords_1_length]).count()[page_serp_df.keyword]

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为.count()方法返回的内容存在误解。

尝试遵循以下示例:

创建示例数据框

df = pd.DataFrame({
    'A':[0,1,0,1, 1],
    'B':[100,200,300, 400, 500],
    'C': [1,2,3,4,5]
})

这是count()之后groupby方法将返回的内容

# similarly to your example I am grouping by A and counting 
df.groupby([df.A]).count()

enter image description here

如您所见,count()方法本身返回一个数据帧,该数据帧具有分组列具有相同值的列的其他列值的计数。 之后,您可以像这样从count()的返回中查询特定的列

df.groupby([df.A]).count()['C']

但是在您的示例中,第二种情况在我的示例中与df.groupby([df.A]).count()[df.C]

会抛出错误!

enter image description here

实际上,您将通过熊猫df.groupby([df.A]).count()查询数据帧(在这种情况下为Series),但是您知道需要df.columns中的字符串或列。

您可以检查自己df.C'C'是两种非常不同的变量类型。

print(type(df.C))
print(type('C'))
# <class 'pandas.core.series.Series'>
# <class 'str'>

如果由于某种原因,您的代码仍可以与df.C等效,则可能会发生意外情况,例如df.C的唯一值是具有相同名称的字符串。那样的无意。