分组依据:每年计算列的总和

时间:2019-04-10 17:50:52

标签: python-3.x pandas numpy

我对熊猫还很陌生,所以我想弄清楚如何使用Groupby命令。 我已经按年份,cik和boolean对数据进行了分组,现在我需要分别对每年中正确和错误的计数求和。

我已经尝试过transform.(sum)['count'],但它会添加我所有3年的数据。 我真的很感谢任何帮助/指导。

谢谢!

df.groupby(['cik','isBase','FY'])['ext'].agg('count').head()

df['ext'] = np.where(df['isBase']== 'false', 1, 0)

df = df.groupby(['cik','isBase','FY',]['ext'].agg('count').reset_index(name='count')

df.head()

        cik     isBase  FY    count
    0   1750    false   2015    78
    1   1750    false   2016    73
    2   1750    false   2017    62
    3   1750    true    2015    328
    4   1750    true    2016    306
    5   1750    true    2017    305

我期望输出是这样的:

    cik    isBase   FY    count      totcount
0   1750    false   2015    78        406
1   1750    false   2016    73        376
2   1750    false   2017    62        367
3   1750    true    2015    328       406
4   1750    true    2016    306       376
5   1750    true    2017    305       367

只要我能获得每年T + F的总数

2 个答案:

答案 0 :(得分:0)

尝试

df['totcount'] = df.groupby('FY')['count'].transform(sum)

基本上,df.groupby('FY')将具有相同年份的所有行分组,然后添加df.groupby('FY')['count']只看count列。现在tranform(sum)将每年(组)转换为相应的总和。

输出:

+-----+------+--------+------+-------+----------+--+
| idx | cik  | isBase |  FY  | count | totcount |  |
+-----+------+--------+------+-------+----------+--+
|   0 | 1750 | False  | 2015 |    78 |      406 |  |
|   1 | 1750 | False  | 2016 |    73 |      379 |  |
|   2 | 1750 | False  | 2017 |    62 |      367 |  |
|   3 | 1750 | True   | 2015 |   328 |      406 |  |
|   4 | 1750 | True   | 2016 |   306 |      379 |  |
|   5 | 1750 | True   | 2017 |   305 |      367 |  |
+-----+------+--------+------+-------+----------+--+

答案 1 :(得分:0)

因此,事实证明我没有正确使用括号...做到了

df['totcount'] = df.groupby(['cik','FY']).transform(sum)['count']