我们假设我们使用下面的代码创建了一个数据帧df。我已经根据df中的'value'列创建了一个bin频率计数。现在,如何根据先前创建的bin获取这些label = 1样本频率计数的频率计数?显然,我不应该使用qcut来获取那些label = 1的样本来获取计数,因为bin位置与以前不同。
import numpy as np
import pandas as pd
mu, sigma = 0, 0.1
theta = 0.3
s = np.random.normal(mu, sigma, 100)
group = np.random.binomial(1, theta, 100)
df = pd.DataFrame(np.vstack([s,group]).transpose())
df.columns = ['value','label']
factor = pd.qcut(df['value'], 5)
factor_bin_count = pd.value_counts(factor)
更新:我从杰夫那里拿到了解决方案
df.groupby(['label',factor]).value.count()
答案 0 :(得分:1)
如果我理解你的问题。您希望采用分组因子(例如,您使用qcut
创建以连接连续值),以及另一个分组器(例如'标签'),然后执行操作。在这种情况下count
。
In [36]: df.groupby(['label',factor]).value.count()
Out[36]:
label value
0 [-0.248, -0.0864] 14
(-0.0864, -0.0227] 15
(-0.0227, 0.0208] 15
(0.0208, 0.0718] 17
(0.0718, 0.24] 13
1 [-0.248, -0.0864] 6
(-0.0864, -0.0227] 5
(-0.0227, 0.0208] 5
(0.0208, 0.0718] 3
(0.0718, 0.24] 7
Name: value, dtype: int64