将pandas qcut函数应用于子组

时间:2015-06-03 23:05:46

标签: python pandas dataframe

我们假设我们使用下面的代码创建了一个数据帧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()

1 个答案:

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