2016-01-27 51 views
3

我想查找某些自定義範圍之間的數據計數。熊貓計算每個範圍之間的值數量

說我有一些數據:

import random 

my_randoms = random.sample(xrange(100), 10)   
test = pd.DataFrame(my_randoms,columns = ["x"]) 

如何可以產生一個數據幀顯示不同的範圍之間的值的數目?例如,假設我想查看0-19,20-39,40-59,60-79,80-100之間有多少個值。輸出數據框將有一列與這些範圍,另一個與計數。

我可以想到一些醜陋的方法,包括使用.apply來獲得一個新的列列表,說明它們之間的值(然後做一個groupby),但我懷疑熊貓有一個更乾淨的潛伏方式。

+1

[Pandas Groupby Value of Range](http://stackoverflow.com/questions/21441259/pandas-groupby-range-of-values)可能會有幫助。 – Jarad

+0

工作!像往常一樣過於簡單 – AZhao

回答

4

每Jarad的鏈接到的其他問題:

test.groupby(pd.cut(test['x'], np.arange(0,100,20))).count() 
2

可能有更好的方法。我只是對新大熊貓自己,但這個怎麼樣的時刻:

test.query(test.x.isin(range(20))) 
1

熊貓和numpy的允許布爾指數, 這是一個醜陋的做法?

ranges = [ (0,19), (20, 39), (40, 69) ...] 
cnt = [] 
for range in ranges: 
    tmp = ranges[(ranges['x'] > range[0]) & (range['x'] <= range[1]) ] 
    cnt.append(len(tmp)) 
+0

我突然想起'numpy.histogram'解決方案。這比我想的要好。 – thekingofkings

0

可以使用numpy.histrogram功能。

import numpy as np 
series = [0, 20, 40, ...] 
count, bin_edge = np.histogram(bins = series) 

根據numpy.histogram,如果bins是一個序列,它定義了箱邊緣,包括最右邊緣,從而允許非均勻倉寬度。