python-3.x - 如何将列中的值汇总为与熊猫中的日期匹配的给定条件的组?
问题描述
我有一个这样的年龄组数据框
Date AgeGroup Quantity
1 2020-12-08 18 - 29 1
2 2020-12-08 30 - 49 4
3 2020-12-08 50 - 54 0
4 2020-12-08 55 - 59 1
5 2020-12-08 60 - 64 1
6 2020-12-08 65 - 69 0
7 2020-12-08 70 - 74 3
8 2020-12-08 75 - 79 2
9 2020-12-08 80+ 1
....
10 2020-12-09 18 - 29 0
11 2020-12-09 30 - 49 2
12 2020-12-09 50 - 54 1
13 2020-12-09 55 - 59 2
14 2020-12-09 60 - 64 3
15 2020-12-09 65 - 69 0
16 2020-12-09 70 - 74 1
17 2020-12-09 75 - 79 1
18 2020-12-09 80+ 1
我想按三个更广泛的年龄组总结每个日期的数字,如下所示:
1 2020-12-08 18 - 59 6
2 2020-12-08 60+ 7
3 2020-12-08 75+ 3
...
4 2020-12-09 18 - 59 5
5 2020-12-09 60+ 5
6 2020-12-09 75+ 2
(第一年龄组包括 59 岁以下,第二组年龄超过 60 岁,第三组年龄超过 75 岁以上)。
我尝试了以下方法:
df1 = df.loc[(df['AgeGroup'] == '18 - 29') | (df['AgeGroup'] == '30 - 49') | (df['AgeGroup'] == '50 - 54') | (df['AgeGroup'] == '55 - 59') , 'Quantity'].sum()
但是,这缺少按日期细分,因为它只是为我提供了这些年龄组在所有日期的总和。
我也试过这个。
df.groupby(['Date', 'AgeGroup'])['Quantity'].sum()
Date AgeGroup
2020-12-08 18 - 29 1
30 - 49 4
50 - 54 0
55 - 59 2
60 - 64 1
65 - 69 0
70 - 74 3
75 - 79 2
2020-12-09 18 - 29 0
30 - 49 2
50 - 54 1
55 - 59 2
60 - 64 3
65 - 69 0
70 - 74 1
75 - 79 1
我仍然无法弄清楚如何在日期内组合这些年龄组。谢谢你的任何想法。
解决方案
Series.str.extract
您可以通过、 比较60
并设置np.where
为 2 组来获取第一个数值:
m = df['AgeGroup'].str.extract('(\d+)', expand=False).astype(int) < 60
df['AgeGroup'] = np.where(m, '18 - 59', '60+')
df1 = df.groupby(['Date', 'AgeGroup'])['Quantity'].sum()
print (df1)
Date AgeGroup
2020-12-08 18 - 59 7
60+ 6
2020-12-09 18 - 59 5
60+ 5
Name: Quantity, dtype: int64
推荐阅读
- eclipse - 中文单词使最新的 Eclipse (2020-06) 块注释缩进显示问题
- javascript - 代码点和 UTF-16 代码单元是一回事吗?
- javascript - Javascript removeAttribute() 和 setAttribute() 方法
- c# - AVPro 视频插件上缺少音频
- jquery - formBuilder 保存或复制 HTML 不起作用
- mysql - 使用本地文件中的记录更新 MySQL 表
- express - 图像未显示在 Heroku 上
- c# - 如何使用 Microsoft.VisualStudio.Services.WebApi 查询已完成的 yaml 版本?
- azure - 如何使 Azure AD access_token 在 Microsoft Graph API 之外对其签名验证兼容?
- javascript - Javascript按多行过滤表格