2014-01-02 1 views
6

сказать У меня есть список:панд биннинговых списка на основе qcut другого списка

a = [3, 5, 1, 1, 3, 2, 4, 1, 6, 4, 8] 

и подкатегория список A:

b = [5, 2, 6, 8] 

я хотел бы получить бункера по pd.qcut(a,2) и подсчитайте количество значений в каждом ящике для списка b. Это

In[84]: pd.qcut(a,2) 
Out[84]: 
Categorical: 
[[1, 3], (3, 8], [1, 3], [1, 3], [1, 3], [1, 3], (3, 8], [1, 3], (3, 8], (3, 8], (3, 8]] 
Levels (2): Index(['[1, 3]', '(3, 8]'], dtype=object) 

Теперь я знаю, что контейнеры являются: [1,3] и (3,8], и я хотел бы знать, сколько значений в каждом бункере для списка «б» я могу сделать. это вручную, когда количество бункеров мало, но то, что это лучший подход, когда число контейнеров большое

ответ

4

Вы можете использовать retbins paramether, чтобы получить бункера назад от qcut:

>>> q, bins = pd.qcut(a, 2, retbins=True) 

Затем используйте pd.cut для получения b индексов относительно бункеров:

>>> b = np.array(b) 
>>> hist = pd.cut(b, bins, right=True).labels 
>>> hist[b==bins[0]] = 0 
>>> hist 
array([1, 0, 1, 1]) 

Обратите внимание, что вам необходимо обработать угловой корпус, bins[0], отдельно, поскольку он не включен разрезом в левый лоток.

0

Как показано в предыдущем ответе: Вы можете получить границы бин из qcut с помощью параметра retbins, как в следующем примере:

q, bins = pd.qcut(a, 2, retbins=True) 

Затем вы можете использовать cut вставить значения из другого списка в эти «закрома «. Например:

myList = np.random.random(100) 
# Define bin bounds that cover the range returned by random() 
bins = [0, .1, .9, 1] 
# Now we can get the "bin number" of each value in myList: 
binNum = pd.cut(myList, bins, labels=False, include_lowest=True) 
# And then we can count the number of values in each bin number: 
np.bincount(binNum) 

Убедитесь, что ваши бен границы охватывают весь диапазон значений, которые появляются в вашем втором списке. Чтобы обеспечить это, вы можете накладывать границы вашего бина с максимальным и минимальным значением. Например,

cutBins = [float('-inf')] + bins.tolist() + [float('inf')] 

 Смежные вопросы

  • Нет связанных вопросов^_^