use*_*752 6 python binning pandas
说我有一个清单:
a = [3, 5, 1, 1, 3, 2, 4, 1, 6, 4, 8]
Run Code Online (Sandbox Code Playgroud)
和一个子列表:
b = [5, 2, 6, 8]
Run Code Online (Sandbox Code Playgroud)
我想获取bin pd.qcut(a,2)并计算列表b的每个bin中的值的数量.那是
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)
Run Code Online (Sandbox Code Playgroud)
现在我知道箱子是:[1,3]和(3,8),我想知道列表"b"的每个箱子中有多少值.当箱子的数量为时,我可以手动完成很小,但是当垃圾箱数量很大时,最好的方法是什么?
您可以使用 retbins 参数从 qcut 获取 bin:
>>> q, bins = pd.qcut(a, 2, retbins=True)
Run Code Online (Sandbox Code Playgroud)
然后使用pd.cut来获取b相对于 bin 的索引:
>>> b = np.array(b)
>>> hist = pd.cut(b, bins, right=True).labels
>>> hist[b==bins[0]] = 0
>>> hist
array([1, 0, 1, 1])
Run Code Online (Sandbox Code Playgroud)
请注意,您必须bins[0]单独处理极端情况 ,因为它不包含在最左侧垃圾箱中的剪切中。