首页 > 解决方案 > 如何将列中的值汇总为与熊猫中的日期匹配的给定条件的组?

问题描述

我有一个这样的年龄组数据框

    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

我仍然无法弄清楚如何在日期内组合这些年龄组。谢谢你的任何想法。

标签: python-3.xpandasdataframesumpandas-groupby

解决方案


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

推荐阅读