我有一个dataframe列,指定用户执行活动的次数。 例如
>>> df['ActivityCount']
Users ActivityCount
User0 220
User1 190
User2 105
User3 109
User4 271
User5 265
...
User95 64
User96 15
User97 168
User98 251
User99 278
Name: ActivityCount, Length: 100, dtype: int32
>>> activities = sorted(df['ActivityCount'].unique())
[9, 15, 16, 17, 20, 23, 25, 26, 28, 31, 33, 34, 36, 38, 39, 43, 49, 57, 59, 64, 65, 71, 76, 77, 78,
83, 88, 94, 95, 100, 105, 109, 110, 111, 115, 116, 117, 120, 132, 137, 138, 139, 140, 141, 144, 145, 148, 153, 155, 157, 162, 168, 177, 180, 182, 186, 190, 192, 194, 197, 203, 212, 213, 220, 223, 231, 232, 238, 240, 244, 247, 251, 255, 258, 260, 265, 268, 269, 271, 272, 276, 278, 282, 283, 285, 290]
根据他们的活动计数,我必须将用户分为5个不同的类别,例如A, B, C, D
和E
。
活动计数范围因时间而异。在上面的例子中,它大约在(9-290)
(系列中最低和最高的)之间,它可以是(5-500)
或(5 to 30)
。
在上面的示例中,我可以将活动的最大数量除以5,并将每个用户分类为58(from 290/5)
的范围,如Range A: 0-58
、Range B: 59-116
、Range C: 117-174
等
有没有其他方法可以使用pandas或numpy来实现这一点,这样我就可以直接在给定的类别中对列进行分类? 预期产量:-
>>> df
Users ActivityCount Category/Range
User0 220 D
User1 190 D
User2 105 B
User3 109 B
User4 271 E
User5 265 E
...
User95 64 B
User96 15 A
User97 168 C
User98 251 E
User99 278 E
实现这一点的自然方法是将数据分成5个数量,然后根据这些数量将数据分成多个容器。幸运的是,熊猫可以让你轻松做到这一点:
输出类似于:
另一种视图-聚类
在上面的方法中,我们将数据拆分为5个存储单元,其中不同存储单元的大小相等。另一种更复杂的方法是将数据分成5个簇,并使每个簇中的数据点尽可能相似。在机器学习中,这被称为聚类/分类问题
一个经典的聚类算法是k-means。它通常用于具有多个维度的数据(例如,每月活动、年龄、性别等)。因此,这是一种非常简单的聚类情况
在这种情况下,k-means聚类可以通过以下方式完成:
输出如下所示:
几点注意:
map
轻松完成李>请尝试以下解决方案:
它创建Categ列-这是对ActivityCount 放入5个箱子中,标有AE
通过将整个范围划分为n子范围来设置箱子的边界 大小相等
您还可以查看每个箱子的边框,调用:
相关问题 更多 >
编程相关推荐