在数据帧中使用groupby时,如何保留所有数据字段?

2024-06-06 00:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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感觉这样做是错误的,因为我已经用它走了这么远


Tags: 数据developerdfdev1repositorydev6dev3commit
2条回答
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

您的数据从来没有超过一对(repo、dev),所以我想知道您是否真的想做sum,或者您只是因为groupby需要一个聚合函数才使用它。如果您真的不需要sum,那么您可以使用标识函数作为聚合函数,这适用于所有列,包括日期:

In [14]: stats_df.groupby(['repository', 'developer']).agg(lambda x: x)
Out[14]: 
                      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

相关问题 更多 >