首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:如何将bin值附加回原始数据

熊猫:如何将bin值附加回原始数据
EN

Stack Overflow用户
提问于 2017-06-11 23:57:28
回答 2查看 1.3K关注 0票数 3

我是潘达斯的新手,我有如下所示的数据

代码语言:javascript
复制
id    values   
 1       2.1
 2       0.8  
 3       1.0
 4       3.2

我希望将列“值”分隔到不同的回收箱中,如bin =2,并添加一列“计数”,表示在回收箱内的行数,例如:

代码语言:javascript
复制
id     values   counts
 1        2.1       2 (since 2.1 and 3.2 both belong to the bin 2-4)
 2        0.8       2 
 3        1.0       2
 4        3.2       2

我知道value_counts函数可以计算频率,但我不知道如何将它们添加回原始数据。

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 02:37:12

使用numpysearchsorted来定义回收箱,使用bincount来计算它们。

这个应该很快。

代码语言:javascript
复制
#         This defines the bin edges
#        [1, 2, 3] would have created
#               different bins
#                    v
b = np.searchsorted([2], df['values'].values)
df.assign(counts=np.bincount(b)[b])

   id  values  counts
0   1     2.1       2
1   2     0.8       2
2   3     1.0       2
3   4     3.2       2
  • np.searchsorted确定了在第一个数组中,为了保持排序,需要放置第二个数组的每个元素的位置。
    • 这意味着:
    • 2.1需要跟踪2,这是1的一个位置。
    • 0.8需要位于2之前,这是0的一个位置。
    • 1.0需要位于2之前,这是0的一个位置。
    • 3.2需要跟踪2,这是1的一个位置。

  • np.bincount方便地计数积分箱的频率。就像我们刚刚创造的那些。
  • 通过按垃圾箱的出现对计数的垃圾箱进行切片,我们得到了一个类似于transformcount
票数 5
EN

Stack Overflow用户

发布于 2017-06-12 00:48:05

让我们使用pd.cutgroupby

两个垃圾箱:

代码语言:javascript
复制
df.assign(counts=df.groupby(pd.cut(df['values'], bins=2))['values'].transform('count'))

或者,如果您希望您的垃圾箱大小= 2:

代码语言:javascript
复制
df.assign(counts=df.groupby(pd.cut(df['values'], bins=[0,2,4]))['values'].transform('count'))

输出:

代码语言:javascript
复制
   id  values  counts
0   1     2.1     2.0
1   2     0.8     2.0
2   3     1.0     2.0
3   4     3.2     2.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44489794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档