首页 > 解决方案 > SeriesGroupBy 与 DataFrameGroupBy

问题描述

我是编程、python 和熊猫的新手。我试图不明白为什么这段代码会给我正确的结果:

原DF:

原DF

df_cat = df_cat.groupby(['cardio','variable'])['value'].value_counts().to_frame().rename(columns={'value': 'total'}).reset_index()

这个返回错误:

df_cat = df_cat.groupby(['cardio','variable'], as_index=False)['value'].value_counts().to_frame().rename(columns={'value': 'total'}).reset_index()

AttributeError: ' DataFrameGroupBy' 对象没有属性 ' value_counts'

我知道唯一的区别是“ as_index=True/False”。在第一种情况下,我得到SeriesGroupBy并能够继续value_counts(),但在第二种情况下DataFrameGroupBy,我试图理解为什么。也许有人可以向我解释这些东西。

标签: pythonpandaspandas-groupby

解决方案


如果解释正确,您将试图弄清楚给定组合出现了多少次。在这种情况下,您还需要在 groupby 函数中加入价值。

data = {'cardio': [0,1,1,1,0,0,1,1,1,0],
       'variable': ['cholesterol', 'cholesterol', 'cholesterol', 'cholesterol', 'cholesterol',
                    'overweight', 'overweight', 'overweight', 'overweight', 'overweight'],
       'value': [0,1,1,0,0,0,0,0,0,0]}
df = pd.DataFrame(data)

在此处输入图像描述

以下函数计算给定组合发生的时间。

df.groupby(['cardio', 'variable', 'value'], as_index=False).agg(total=pd.NamedAgg(column = 'value', aggfunc='count'))

在此处输入图像描述


推荐阅读