Pandas 根据索引对列值进行分箱
Pandas binning column values according to the index
目前,我有一个 DataFrame,它包含人口的年龄和这些年龄的频率,如下所示:
freq
27 103
28 43
29 13
... ...
78 20
79 13
年龄是DataFrame的索引。我想执行一些 Pandas 魔术,以便我得到一个像这样的分箱 DataFrame:
freq
(20, 30] 308
(30, 40] 111
(40, 50] 85
(50, 60] 58
(60, 70] 63
(70, 80] 101
因此,该指数现在由年龄间隔组成,而不是单个年龄,并且相应地对频率求和。我怎样才能做到这一点?
你可以在使用cut
对DataFrame的索引进行分箱后使用groupby
。例如:
>>> 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;您可以根据 'freq' 列中的 max/min 值进行调整。
目前,我有一个 DataFrame,它包含人口的年龄和这些年龄的频率,如下所示:
freq
27 103
28 43
29 13
... ...
78 20
79 13
年龄是DataFrame的索引。我想执行一些 Pandas 魔术,以便我得到一个像这样的分箱 DataFrame:
freq
(20, 30] 308
(30, 40] 111
(40, 50] 85
(50, 60] 58
(60, 70] 63
(70, 80] 101
因此,该指数现在由年龄间隔组成,而不是单个年龄,并且相应地对频率求和。我怎样才能做到这一点?
你可以在使用cut
对DataFrame的索引进行分箱后使用groupby
。例如:
>>> 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;您可以根据 'freq' 列中的 max/min 值进行调整。