首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >直方图箱

直方图箱
EN

Stack Overflow用户
提问于 2017-04-01 18:02:53
回答 1查看 927关注 0票数 1

我有一个数据框架,如下所示:

代码语言:javascript
运行
复制
     legal    value
0    1        3
1    1        7
2    0        10
3    1        12
4    1        4
5    1        17
6    0        21
7    1        19
8    1        3
9    0        18
10   1        17
11   1        17
12   0        11
13   1        23

我试图只将合法的1值分割成6 bin间隔的直方图。每隔一段时间如下:

代码语言:javascript
运行
复制
[0-6], [6-9], [9-12], [12-16], [16-20], [20-24]

然后收集的数据将如下所示:

代码语言:javascript
运行
复制
bin    frequency   values
0-6    3           3, 4, 3
6-9    1           7
9-12   1           12
12-16  1           12
16-20  4           17, 17, 19, 17
20-24  1           23

我试图在c轴上创建一个带有bin间隔的直方图,并在y轴上创建有效的1值的频率。基本上是试图创建一个类似于这个示例的直方图。

到目前为止,我已经这样写了:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict 

bins = ['0-6', '6-9', '9-12', '12-16', '16-20', '20-24']
df = pd.read_csv('data.csv', encoding = 'ISO-8859-1')

d = defaultdict(int)
for legal, value in zip(df['legal'], df['value']):
    if (legal == 1):
        if (0 <= value <= 6):
            d[bins[0]] += 1

它试图用字典对垃圾箱进行分组,但是这似乎太复杂了,而且它们肯定是使用pandas库的更好的方法。

我如何使用像pandas.Dataframe.groupby这样的东西将垃圾箱按其各自的频率分组,然后用matplotlib.pyplot在直方图上绘制这些值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-01 18:22:36

不需要做任何分组,数据就可以被过滤的“合法”列值。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import pandas as pd

legal= [1,1,0,1,1,1,0,1,1,0,1,1,0,1]
value = [3,7,10,12,4,17,21,19,3,18,17,17,11,23]
df = pd.DataFrame({"legal":legal, "value":value})

df2 = df[df["legal"] == 1]

bins = [0,6,9,12,16,20,24]
plt.hist(df2["value"], bins=bins, edgecolor="k")
plt.xticks(bins)

plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43160266

复制
相关文章

相似问题

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