gpt4 book ai didi

python - Pandas 按重叠箱分组

转载 作者:行者123 更新时间:2023-12-05 01:27:46 24 4
gpt4 key购买 nike

我想汇总重叠 bin 中的数据。基本上问题here但不是垃圾箱是(0-8岁),(9-17岁),(18-26岁),(27-35岁)和(26-44岁)我希望他们为(0-8岁)、(1-9岁)、(2-10岁)、(3-11岁)和(4-12岁)。

从这样的df开始

<表类="s-表"><头>id奖项年龄<正文>11002411502615054219334220950

我正在使用来自 this 的代码回答以计算非重叠 bin 之间的总和。

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)]

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

是否可以利用现有代码来处理重叠的垃圾箱?

最佳答案

首先 pivot_table 你的数据,每个 id 一行,列是年龄。然后 reindex 获取所有可能的年龄,从 0 到至少 max 列 age (这里我使用 max 加上间隔长度)。现在您可以沿列使用滚动重命名 列以创建有意义的名称。最后 stackreset_index 得到一个具有预期形状的数据帧。

interval = 9 #include both bounds like 0 and 8 for the first interval
res = (
df.pivot_table(index='id', columns='age', values='awards',
aggfunc=sum, fill_value=0)
.reindex(columns=range(0, df['age'].max()+interval), fill_value=0)
.rolling(interval, axis=1, min_periods=interval).sum()
.rename(columns=lambda x: f'{x-interval+1}-{x} y.o.')
.stack()
.reset_index(name='awards')
)

你得到问题中提供的输入数据

print(res)
# id age awards
# 0 1 0-8 y.o. 0.0
# 1 1 1-9 y.o. 0.0
# ...
# 15 1 15-23 y.o. 0.0
# 16 1 16-24 y.o. 100.0
# 17 1 17-25 y.o. 100.0
# 18 1 18-26 y.o. 250.0
# 19 1 19-27 y.o. 250.0
# 20 1 20-28 y.o. 250.0
# 21 1 21-29 y.o. 250.0
# 22 1 22-30 y.o. 250.0
# 23 1 23-31 y.o. 250.0
# 24 1 24-32 y.o. 250.0
# 25 1 25-33 y.o. 150.0
# 26 1 26-34 y.o. 150.0
# 27 1 27-35 y.o. 0.0
# ...
# 45 1 45-53 y.o. 0.0
# 46 1 46-54 y.o. 50.0
# 47 1 47-55 y.o. 50.0
# 48 1 48-56 y.o. 50.0
# 49 1 49-57 y.o. 50.0
# ...

关于python - Pandas 按重叠箱分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69194187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com