Pandas根据索引对列值进行分箱

时间:2015-11-17 15:35:25

标签: python pandas dataframe binning

目前,我有一个DataFrame,它可以保存一群人的年龄和这些年龄的频率,如下所示:

      freq
 27    103
 28     43
 29     13
...    ...
 78     20
 79     13

年龄是DataFrame的索引。我想执行一些Pandas魔法,以便我得到一个这样的binned DataFrame:

           freq
 (20, 30]   308
 (30, 40]   111
 (40, 50]    85
 (50, 60]    58
 (60, 70]    63
 (70, 80]   101

因此,索引现在由年龄间隔而不是个别年龄组成,并且频率相应地相加。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:6)

使用groupby后,您可以使用cut来存储DataFrame的索引。例如:

>>> df = pd.DataFrame({'freq': [2, 3, 5, 7, 11, 13]}, 
                      index=[22, 29, 30, 31,25, 42])

>>> df
    freq
22     2
29     3
30     5
31     7
25    11
42    13

然后:

>>> df.groupby(pd.cut(df.index, np.arange(20, 60, 10))).sum()
          freq
(20, 30]    21
(30, 40]     7
(40, 50]    13

np.arange(20, 60, 10)定义将使用的bin;您可以根据“频率”中的最大/最小值来调整这些值。列。