我在Python中有两个随机数的数组:
vn = np.random.normal(20,5,500);
vu = np.random.uniform(17,25,500);
我正在尝试使用pandas创建一个Frecuency表来计算范围内的发生次数,但我真的不知道如何做,输入和输出的示例如下:
输入:
vn: [2,3,6,6,7,8,9,9,10,7]
vu: [1,1,2,3,6,7,7,7,8,9]
输出:
Range count_vn count_vu
(0, 5] 2 4
(5, 10] 8 6
任何帮助将不胜感激
答案 0 :(得分:5)
IIUC:
In [228]: df.apply(lambda x: pd.cut(x, bins=[0,5,10]).value_counts()).add_prefix('count_')
Out[228]:
count_vn count_vu
(5, 10] 8 6
(0, 5] 2 4
或@ayhan提供的更好的解决方案:
In [26]: df.apply(pd.Series.value_counts, bins=[0,5,10])
Out[26]:
vn vu
(5.0, 10.0] 8 6
(-0.001, 5.0] 2 4
某种程度上它产生了#34;奇怪的"仓...
答案 1 :(得分:1)
您可以使用groupby尝试pd.cut,然后连接数据帧。
vn= [2,3,6,6,7,8,9,9,10,7]
vu= [1,1,2,3,6,7,7,7,8,9]
df = pd.DataFrame({'vn': vn, 'vu': vu})
bins = np.arange(0,df.stack().max()+1,5)
pd.concat([df.groupby(pd.cut(df.vn, bins=bins)).vn.count(),\
df.groupby(pd.cut(df.vu, bins=bins)).vu.count()], axis = 1)
你得到了
vn vu
(0, 5] 2 4
(5, 10] 8 6
可能有一种方法可以在没有连接的情况下直接进行,但我无法提出任何