带有 bin sum 聚合的 Pandas Groupby

数据科学32

我有一个类似的问题一个

我在 Pandas 中有一个数据框,看起来像这样 - 显示不同用户获奖的年龄。

ID 奖项 年龄
1 100 24
1 150 26
1 50 54
2 193 34
2 209 50

有兴趣计算年龄区间的总奖励,即 0(0-8 岁)、1(9-17 岁)、2(18-26 岁)、3(27-35 岁)、4(26-44 岁)岁)……等等。每个人都应该有尽可能多的年龄间隔。

我怎样才能按 id 和 9 岁的年龄间隔对它们进行分组以获得这样的结果:

ID。 total_awards 年龄间隔
1 0 0
1 0 1
1 250 2
1 0 3
1 0 4
1 0 5
1 50 6
2 0 0
2 0 1
2 0 2
2 193 3
2 0 4
2 209 5
2 0 6
海豆

您可以按如下方式定义分箱和切割:

bins = [9 * i for i in range(0, df['age'].max() // 9 + 2)]
cuts = pd.cut(df['age'], bins, right=False)

print(cuts)

0    [18, 27)
1    [18, 27)
2    [54, 63)
3    [27, 36)
4    [45, 54)
Name: age, dtype: category
Categories (7, interval[int64, left]): [[0, 9) < [9, 18) < [18, 27) < [27, 36) < [36, 45) < [45, 54) < [54, 63)]

然后, group by idand thecuts和 sum awardsfor the cut to get total_awards创建age_intervalGroupBy.cumcount()

df_out = (df.groupby(['id', cuts])
            .agg(total_awards=('awards', 'sum'))
            .reset_index(level=0)
            .reset_index(drop=True)
         )
df_out['age_interval'] = df_out.groupby('id').cumcount()

结果:

print(df_out)

    id  total_awards  age_interval
0    1             0             0
1    1             0             1
2    1           250             2
3    1             0             3
4    1             0             4
5    1             0             5
6    1            50             6
7    2             0             0
8    2             0             1
9    2             0             2
10   2           193             3
11   2             0             4
12   2           209             5
13   2             0             6

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章