首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数字数据分组为二进制范围

将数字数据分组为二进制范围
EN

Stack Overflow用户
提问于 2018-05-12 01:57:27
回答 2查看 81关注 0票数 3

这是我的原始数据:

代码语言:javascript
运行
复制
    fi_diameter  ever_percent
0     -1.000000          0.00
1     -0.694212          0.00
2     -0.499782          0.00
3     -0.249749          0.00
4     -0.000000          0.00
5      0.249822          0.00
6      0.500218          0.00
7      0.749038          0.00
8      0.985645          0.00
9      1.251539          0.00
10     1.498179          0.00
11     2.122177          0.78
12     2.000000          3.70
13     2.251539          6.23
14     2.498179          8.66
15     2.746616         10.79
16     3.000000         12.13
17     3.251539         11.93
18     3.506353         10.78
19     3.756331          8.55
20     3.988504          5.90
21     4.237864          4.34
22     4.506353          2.89
23     5.011588          2.84
24     5.506353          1.88
25     5.965784          1.65
26     6.965784          2.49
27     7.965784          1.33
28     7.965784          3.13

我想将我的数据更改为这种类型:

代码语言:javascript
运行
复制
  1-2   4.48
  2-3  37.81
  3-4  37.16
  4-5   7.23
  5-6   6.37
  6-7   2.49
  7-8   4.46

我试着使用“群比”的熊猫,但它并没有把数据转换成我想要的那样。

我如何得到这个输出?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-12 02:21:50

  1. 过滤掉1以下的值
  2. 使用pd.cut和bin fi_diameter
  3. 使用禁用的标签在ever_percent上进行分组和和

代码语言:javascript
运行
复制
df = df.query('fi_diameter >= 1')
grouper = pd.cut(
    df['fi_diameter'], 
    bins=[1, 2, 3, 4, 5, 6, 7, 8], 
    labels=['1-2', '2-3', '3-4', '4-5', '5-6', '6-7', '7-8']
)
df.groupby(grouper).ever_percent.sum().reset_index()

  fi_diameter  ever_percent
0         1-2          3.70
1         2-3         38.59
2         3-4         37.16
3         4-5          7.23
4         5-6          6.37
5         6-7          2.49
6         7-8          4.46

以下是对任何上限的概括。

代码语言:javascript
运行
复制
mx = int(np.ceil(df['fi_diameter'].max()))
rn = np.arange(1, mx + 1)

df = df.query('fi_diameter >= 1')
grouper = pd.cut(
    df['fi_diameter'], 
    bins=rn, 
    labels=[
        str(i) + '-' + str(j) for i, j in zip(rn, rn[1:])
    ]
)    
df.groupby(grouper).ever_percent.sum().reset_index()

  fi_diameter  ever_percent
0         1-2          3.70
1         2-3         38.59
2         3-4         37.16
3         4-5          7.23
4         5-6          6.37
5         6-7          2.49
6         7-8          4.46
票数 1
EN

Stack Overflow用户

发布于 2018-05-12 03:42:27

这会有用吗?

代码语言:javascript
运行
复制
bins = [1,2,3,4,5,6,7,8]    
data['bins'] = pd.cut(data.fi_diameter, bins=bins, labels=['1-2', '2-3', '3-4', '4-5', '5-6', '6-7', '7-8'])    
df = data.groupby(['bins']).sum()    
df = df.drop('fi_diameter', axis=1)

df

    ever_percent
bins    
1-2     3.70
2-3     38.59
3-4     37.16
4-5     7.23
5-6     6.37
6-7     2.49
7-8     4.46
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50302228

复制
相关文章

相似问题

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