如何计算分组出现的次数?
数据挖掘
Python
熊猫
数据清理
2021-09-18 10:56:07
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
,则后面没有组合。
希望这可以帮助。
其它你可能感兴趣的问题