You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按作者分组合并两类统计结果 实现开发者贡献多维度指标汇总

你原来的第二部分统计逻辑存在问题:统计最高产时段、最高产日时没有按author维度分组,得到的是整个仓库的全局指标,并不是每个作者自己的对应指标。要实现合并需求,需要先按作者维度计算每个作者的最高产日、最高产时段,再和第一部分的统计结果按author字段合并即可。


完整实现代码

import pandas as pd

# 1. 统一筛选时间范围,避免重复写逻辑
after = pd.to_datetime("2020-12-28", utc=True)
before = pd.to_datetime("2021-04-10", utc=True)
df = self.df[(self.df["date"] > after) & (self.df["date"] < before)].copy()

# 2. 提前生成需要的衍生字段
# 最高产日:周几,0对应周一、6对应周日,和你原有逻辑一致
df['weekday'] = df['date'].dt.weekday
# 最高产时段:格式化后的12小时制时间
df['time_str'] = pd.to_datetime(df['timestamp']).dt.strftime("%I:%M %p")

# 3. 统计第一部分指标:总提交数、平均代码量、平均工作负载
base_stats = df.groupby('author').agg(
    sha=('sha', 'size'), # 和你原有输出的字段名保持一致,用sha存总提交数
    code_volume=('code_volume', 'mean'),
    code_work_load=('code_work_load', 'mean')
).reset_index()

# 4. 统计每个作者的最高产日
# 先按作者+周几分组统计提交数
day_count = df.groupby(['author', 'weekday'], as_index=False)['sha'].nunique()
# 每个作者取提交数最多的周几,有并列的话默认保留第一个
most_prod_day = day_count.sort_values(['author', 'sha'], ascending=[True, False])\
                         .drop_duplicates('author', keep='first')\
                         .rename(columns={'weekday': 'most_productive_day'})[['author', 'most_productive_day']]

# 5. 统计每个作者的最高产时段
# 先按作者+时段分组统计提交数
time_count = df.groupby(['author', 'time_str'], as_index=False)['sha'].nunique()
# 每个作者取提交数最多的时段,有并列的话默认保留第一个
most_prod_time = time_count.sort_values(['author', 'sha'], ascending=[True, False])\
                           .drop_duplicates('author', keep='first')\
                           .rename(columns={'time_str': 'most_productive_time'})[['author', 'most_productive_time']]

# 6. 合并三个统计结果,得到最终汇总表
final_result = base_stats.merge(most_prod_day, on='author', how='left')\
                         .merge(most_prod_time, on='author', how='left')\
                         .set_index('author') # 如果你不需要把author设为索引,直接删掉这行即可

# 输出结果
print(final_result)

注意事项

  • 如果同一个作者有多个最高产日/时段的提交数完全相同,上述逻辑会保留排序后的第一个结果,如果你需要保留所有并列结果,去掉drop_duplicates相关代码自行调整即可。
  • 用左连接(left join)是为了避免特殊场景下丢失第一部分已经统计到的作者,不会出现漏算情况。

内容的提问来源于stack exchange,提问作者milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:36:01