首页 > 解决方案 > Groupby,范围计数和 Pandas 分布

问题描述

我想df按“ b”分组并计算不同范围内的项目数。

我试过:

np.random.seed(2)
df = pd.DataFrame({"a": np.random.random_integers(1, high=50, size=10), "b": ['AAA', 'BBB', 'AAA', 'BBB', 'AAA', 'BBB', 'CCC', 'CCC', 'AAA', 'AAA']})
ranges = [0,10,20, 30 ]
df.groupby(pd.cut(df.a, ranges)).agg({'a':'count', 'b':'first'})

返回:


           a    b
   a        
(0, 10]     2   BBB
(10, 20]    3   BBB
(20, 30]    1   AAA

但我想 groupbyb从而使其成为索引,然后“转置”数据帧并使范围成为新列 预期输出:

    (0, 10]   (10, 20]   (20, 30]
 
AAA    0          0         1      
BBB    2          3         0

标签: pythonpandasdataframe

解决方案


您可以使用pivot table

df = df.assign(bins = pd.cut(df.a, bins=ranges)).pivot_table(index='b', columns='bins', values='a', aggfunc='count')

OUTPUT

bins  (0, 10]  (10, 20]  (20, 30]
b                                
AAA         1         0         1
BBB         1         1         0
CCC         0         2         0

推荐阅读