我有一个数据框架,如下所示:
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间隔的直方图。每隔一段时间如下:
[0-6], [6-9], [9-12], [12-16], [16-20], [20-24]
然后收集的数据将如下所示:
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值的频率。基本上是试图创建一个类似于这个示例的直方图。
到目前为止,我已经这样写了:
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
在直方图上绘制这些值
发布于 2017-04-01 18:22:36
不需要做任何分组,数据就可以被过滤的“合法”列值。
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()
https://stackoverflow.com/questions/43160266
复制相似问题