首页 > 解决方案 > 在熊猫数据框中使用 groupby 时如何保留所有数据字段?

问题描述

我正在收集有关对我组织存储库的贡献的一些统计数据。最终的数据框如下所示:

repository          developer  commits   adds  deletes first_commit_week last_commit_week
     repo1               dev1        1     57       12        2021-01-10       2021-01-10
     repo1               dev2        5     71       58        2020-08-23       2020-09-27
     repo1               dev3       10    107       16        2020-08-09       2020-10-18
     repo2               dev1       25    712     1184        2020-06-28       2020-12-13
     repo2               dev3       51   1141      236        2021-01-10       2021-05-09
     repo2               dev4        4      9        7        2021-01-10       2021-05-09
     repo2               dev5       10    121      242        2020-08-09       2021-02-07
     repo2               dev6       75   4319     8881        2020-07-19       2021-04-25
     repo3               dev1       21   3008     6391        2019-09-08       2021-05-09
     repo3               dev3        5     51       70        2019-09-08       2021-04-25
     repo3               dev6        1     14        1        2020-06-28       2020-06-28

之后,我将数据框分组并像这样打印:

df_groupby_repository_developer = stats_df.groupby(["repository", "developer"])
print(df_groupby_repository_developer.sum().to_string())

导致此输出

                               commits    adds  deletes
repository developer                                   
repo1           dev1                 1      57       12
                dev2                 5      71       58
                dev3                10     107       16
repo2           dev1                25     712     1184
                dev3                51    1141      236
                dev4                 4       9        7
                dev5                10     121      242
                dev6                75    4319     8881
repo3           dev1                21    3008     6391 
                dev3                 5      51       70
                dev6                 1      14        1

有了这个,我有一个很好的视觉输出。它很好地显示了组,没有额外的存储库名称。但是,它会丢失两个日期字段。

我意识到这是由于sum(),但我想要我拥有的漂亮的视觉输出,groupby但也有原始数据框中的第一个和最后一个提交日期。我怎样才能做到这一点?

有没有更好的方法来实现这一点?groupby感觉这是错误的方法,因为我已经玩过它来做到这一点。

标签: pythonpandaspandas-groupby

解决方案


stats_df.groupby(["repository", "developer"]).agg({
    'commits':'sum',
    'adds':'sum',
    'deletes':'sum',
    'first_commit_week':'first',
    'last_commit_week':'last'
})

输出

                     commits. adds  deletes first_commit_week   last_commit_week
repository  developer                   
repo1   dev1          1     57      12      2021-01-10      2021-01-10
        dev2          5     71      58      2020-08-23      2020-09-27
        dev3          10    107     16      2020-08-09  2020-10-18
repo2   dev1          25    712     1184    2020-06-28  2020-12-13
        dev3          51    1141    236     2021-01-10  2021-05-09
        dev4          4     9       7       2021-01-10  2021-05-09
        dev5          10    121     242     2020-08-09  2021-02-07
        dev6          75    4319    8881    2020-07-19  2021-04-25
repo3   dev1          21    3008    6391    2019-09-08  2021-05-09
        dev3           5    51      70      2019-09-08  2021-04-25
        dev6           1    14      1       2020-06-28  2020-06-28

推荐阅读