我有一个类似的问题这一个
我在 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 id
and thecuts
和 sum awards
for the cut to get total_awards
。创建age_interval
者GroupBy.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] 删除。
我来说两句