猿问

pandas:如何计算唯一类别?

我有一个数据框


df_input = pd.DataFrame(

        {

            "col_cate": ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],

            "target_bool": [True, False, True, False, True, False, True, False]

        }

    )

我想计算独特类别的数量。所以我希望输出是这样的


col_cate, target_bool, cnt

'A'     , True       , 2

'A'     , False      , 2

'B'     , True       , 2

'B'     , False      , 2

但是df_input.group_by(["col_cate", "target_bool"]).count()给


Empty DataFrame

Columns: []

Index: [(A, False), (A, True), (B, False), (B, True)]

但是dummy在df_input作品中添加一个,比如df_input["dummy"] = 1.


如何在不添加虚拟对象的情况下按计数表获取分组?


慕斯709654
浏览 144回答 3
3回答

慕沐林林

df_input.groupby('col_cate')['target_bool'].value_counts()col_cate  target_boolA         False          2          True           2B         False          2          True           2然后你可以 reset_index()

胡子哥哥

因为函数GroupBy.count用于计算具有排除缺失值的值,如果存在是必要的,请在 groupby 之后指定列,如果两列都用于by参数 in groupby:df = (df_input.groupby(by=["col_cate", "target_bool"])['col_cate']              .count()              .reset_index(name='cnt'))print (df)  col_cate  target_bool  cnt0        A        False    21        A         True    22        B        False    23        B         True    2如果要计算所有列,如果指定两列,则两者都是可能的(但这里总是相同的输出):df1 = (df_input.groupby(["col_cate", "target_bool"])[['col_cate','target_bool']]               .count()               .add_suffix('_count')               .reset_index())print (df1)  col_cate  target_bool  col_cate_count  target_bool_count0        A        False               2                  21        A         True               2                  22        B        False               2                  23        B         True               2                  2或者如果使用 GroupBy.size方法它的工作方式有点不同 - 它计算所有值,不排除丢失,因此不需要指定列:df = df_input.groupby(["col_cate", "target_bool"]).size().reset_index(name='cnt')print (df)  col_cate  target_bool  cnt0        A        False    21        A         True    22        B        False    23        B         True    2

呼唤远方

也像这样:In [54]: df_input.groupby(df_input.columns.tolist()).size().reset_index().\     ...:     rename(columns={0:'cnt'}) Out[54]:   col_cate  target_bool  cnt0        A        False    21        A         True    22        B        False    23        B         True    2
随时随地看视频慕课网APP

相关分类

Python
我要回答