首页 > 解决方案 > Pandas 中的过滤器 - 为什么这不起作用?

问题描述

这是一个基本问题,所以提前道歉。

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

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

这是参考以下内容:

我不明白的是为什么过滤条件必须是['keyword']即引号中的字符串?例如,这不起作用,这对我来说非常违反直觉:

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

提前致谢!

标签: pythonpandasdataframepandas-groupby

解决方案


我认为对该.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()

在此处输入图像描述

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

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

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

会报错!

在此处输入图像描述

实际上,您可以df.groupby([df.A]).count()通过 pandas 查询数据框(在本例中),Series但您知道您需要来自df.columns.

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

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

如果由于某种原因您的代码仍然可以与等价物一起使用,df.C则可能存在一些意外情况,例如 的唯一值df.C是具有相同名称的列的字符串.. 或类似的意外情况。


推荐阅读