频率表按大熊猫的范围

时间:2017-08-21 22:36:40

标签: python pandas

我在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

任何帮助将不胜感激

2 个答案:

答案 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

可能有一种方法可以在没有连接的情况下直接进行,但我无法提出任何