Python 在数据帧中使用groupby时,如何保留所有数据字段?
我正在收集一些关于对我的组织的存储库的贡献的统计数据。最后的数据帧如下所示:Python 在数据帧中使用groupby时,如何保留所有数据字段?,python,pandas,pandas-groupby,Python,Pandas,Pandas 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
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
觉得这样做是错误的,因为我已经用它走了这么远
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
输出
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),因此我想知道您是否真的想进行
求和
,或者您只是因为groupby
需要一个聚合函数才使用它。如果您真的不需要对求和,那么您可以使用identity函数作为聚合函数,这适用于所有列,包括日期:
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
您的数据从来没有超过一对(repo、dev),因此我想知道您是否真的想进行
求和
,或者您只是因为groupby
需要一个聚合函数才使用它。如果您真的不需要对求和,那么您可以使用identity函数作为聚合函数,这适用于所有列,包括日期:
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