如何计算分组出现的次数?

数据挖掘 Python 熊猫 数据清理
2021-09-18 10:56:07

我的数据集有 2 列:

1)性别(有1或2)

2)Rating1(有3个评级(1,2,3))

rating1: 1,2,3,3,2

gender: 2,1,2,2,1

我想要输出为:在此处输入图像描述

我试过这个:

nutri.groupby(['Rating1','Gender']).nunique()

但我得到一个看起来错误的输出。

1个回答

你可以这样做

>>> import pandas as pd
>>> m = pd.DataFrame({'gender': [1, 2, 2, 1, 1, 2, 1], 'rating': [3, 4, 2, 1, 3, 1, 5]})
>>> m.groupby(['rating','gender']).size().to_frame('count').reset_index()
   rating  gender  count
0       1       1      1
1       1       2      1
2       2       2      1
3       3       1      2
4       4       2      1
5       5       1      1

希望这是你想要拉的。

编辑:如前所述,我没有考虑零值。

你需要多做一步才能得到你想要的。找到缺少的组合,然后加入它。一个班轮解决方案是

>>> from itertools import product
>>> m.groupby(['rating', 'gender']).size().to_frame('count').reset_index().merge(
        pd.DataFrame(list(set([i for i in product(*[m.gender, m.rating])])), columns=['gender', 'rating']),
        on=['rating', 'gender'],
        how='right').fillna(value=0)
   rating  gender  count
0       1       1    1.0
1       1       2    1.0
2       2       2    1.0
3       3       1    2.0
4       4       2    1.0
5       5       1    1.0
6       2       1    0.0
7       4       1    0.0
8       3       2    0.0
9       5       2    0.0

解释

获取第一次编辑之前提到的原始分组计数,但这次您需要加入缺少的组合以获得零计数。用于itertools.product获取性别和评级的所有组合,并将其与原始分组框架正确连接,rating并在不存在计数的情况下gender合并DataFrame具有numpy.na值的值,然后使用fillna方法将其填充为零。唯一的漏洞是,如果原始数据中没有评级4,则后面没有组合。

希望这可以帮助。