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

基于Pandas分组操作分析Git仓库日志数据的技术问询

Git仓库日志分析:解决你的四个统计需求

Hey Andrew, 我来帮你一步步实现这四个统计需求,咱们基于你已经写好的Pandas代码来扩展,这样你能快速衔接上:

首先,先把基础的数据处理代码统一放这里(和你的代码保持一致,方便后续复用):

import pandas as pd

# 显示所有列和行,方便查看结果
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

# 读取数据并转换日期格式
dataframe = pd.read_csv("git-log-2020.csv")
dataframe['date'] = pd.to_datetime(dataframe['date'])

# 先按月份和用户分组,计算每个用户每月的提交次数,这个是后续所有统计的基础
grouped_month_user = dataframe.groupby(
    [pd.Grouper(key='date', freq='M'), "email"]
)[["subject"]].count().rename(columns={'subject': 'monthly_commits'})

1. 每月提交量排名前三的用户

我们可以在按月分组的结果里,对每个月份的用户提交数取前3名:

# 对每个月份的用户提交数排序,取前三
top3_per_month = grouped_month_user.groupby(level='date').apply(
    lambda x: x.nlargest(3, 'monthly_commits')
).reset_index(level=0, drop=True)

print("每月提交量前三的用户:")
print(top3_per_month)

这里用groupby(level='date')按月份分组,nlargest(3, 'monthly_commits')直接取出每个组里提交数最多的三个用户,最后重置索引让结果更易读。


2. 每月总提交次数

这个需求很直接,只需要按月份聚合所有用户的提交数总和:

monthly_total_commits = grouped_month_user.groupby(level='date')['monthly_commits'].sum().rename('total_monthly_commits')

print("\n每月总提交次数:")
print(monthly_total_commits)

基于之前的grouped_month_user,再次按月份分组,对monthly_commits求和,就能得到每个月的总提交量。


3. 每月每位用户的平均提交次数

这里的逻辑是:每月总提交数 ÷ 当月有提交的用户数量,我们可以先分别计算这两个值,再做除法:

# 计算每月的用户数量
monthly_user_count = grouped_month_user.groupby(level='date').size().rename('monthly_user_count')

# 计算每月用户平均提交次数
monthly_avg_per_user = monthly_total_commits / monthly_user_count
monthly_avg_per_user = monthly_avg_per_user.rename('avg_commits_per_user_per_month')

print("\n每月每位用户的平均提交次数:")
print(monthly_avg_per_user)

先通过size()得到每个月有提交的用户数,再用每月总提交数除以这个数值,就得到了当月用户的平均提交次数。


4. 用户的月度平均活跃度

这里的月度平均活跃度指的是:每个用户的总提交数 ÷ 该用户有提交记录的月份数,也就是用户平均每个参与月份的提交量:

# 先计算每个用户的总提交数和参与的月份数
user_stats = grouped_month_user.reset_index().groupby('email').agg(
    total_commits=('monthly_commits', 'sum'),
    active_months=('date', 'nunique')
)

# 计算月度平均活跃度
user_monthly_avg_active = user_stats['total_commits'] / user_stats['active_months']
user_monthly_avg_active = user_monthly_avg_active.rename('monthly_avg_activity')

print("\n用户的月度平均活跃度:")
print(user_monthly_avg_active)

先重置索引,然后按用户分组,用agg()同时计算总提交数和参与的月份数,最后做除法得到每个用户的月度平均活跃度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:22:36