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

Pandas中统计从X队到Y队的球员月度转会次数优化问询

优化每月X→Y转会球员统计代码的方案

嘿,我来帮你优化这段代码,顺便还能Fix原代码里的一个潜在逻辑漏洞!先明确你的需求:统计每个月从Team X转会到Team Y的球员总数,而且同一球员当月可能有多条重复记录对吧?

原代码的问题

原代码虽然能得到预期结果,但存在两个明显问题:

  1. 步骤冗余:多次分组、去重和索引重置,效率偏低,尤其是数据量较大时会更明显;
  2. 逻辑漏洞:没有判断球员是从X转Y,还是从Y转X——如果有球员先加入Y再转到X,原代码会错误地把他的转会月份(X的月份)统计进去。

高效优化方案(两种可选)

方案一:利用分组获取首次入队时间,精准筛选转会

这个方法通过定位每个球员加入X和Y的最早月份,确保只统计先X后Y的转会:

import pandas as pd

# 给定的原始数据
df = pd.DataFrame({'Player': [1,1,1,1,2,2,2,3,3,3,4,5], 
                   "Team": ['X','X','X','Y','X','X','Y','X','X','Y','X','Y'],
                   'Month': [1,1,1,2,1,1,2,2,2,3,4,5]})

# 1. 获取每个球员加入各队伍的最早月份
player_team_first = df.groupby(['Player', 'Team'])['Month'].min().unstack()

# 2. 筛选:同时加入过X和Y,且X的加入时间早于Y的球员(确保是X→Y转会)
valid_transfers = player_team_first.dropna(subset=['X', 'Y'])
valid_transfers = valid_transfers[valid_transfers['X'] < valid_transfers['Y']]

# 3. 统计每个月份的转会人数(转会月份为加入Y的最早月份)
result = valid_transfers['Y'].value_counts().sort_index().reset_index(name='Count')
result.columns = ['Month', 'Count']

print(result)

输出结果:

Month  Count
0      2      2
1      3      1

方案二:利用移位操作直接定位转会节点

这个方法更直观,通过时间排序+移位对比,直接找到从X切换到Y的那个月份:

import pandas as pd

df = pd.DataFrame({'Player': [1,1,1,1,2,2,2,3,3,3,4,5], 
                   "Team": ['X','X','X','Y','X','X','Y','X','X','Y','X','Y'],
                   'Month': [1,1,1,2,1,1,2,2,2,3,4,5]})

# 1. 按球员和月份排序,确保时间顺序
df_sorted = df.sort_values(['Player', 'Month'])

# 2. 去重同一球员当月的重复记录(保留当月最后一条即可)
df_unique = df_sorted.drop_duplicates(['Player', 'Month'], keep='last')

# 3. 获取每个球员上一个月份的队伍
df_unique['prev_team'] = df_unique.groupby('Player')['Team'].shift(1)

# 4. 筛选:当前队伍是Y,且上一个队伍是X的记录(即转会发生的月份)
transfers = df_unique[(df_unique['Team'] == 'Y') & (df_unique['prev_team'] == 'X')]

# 5. 统计每个月份的转会人数
result = transfers.groupby('Month').size().reset_index(name='Count')

print(result)

输出结果和方案一完全一致,而且逻辑更贴近实际转会场景。

优化后的优势

  • 效率更高:减少了中间数据框的创建,用更少的分组/操作完成统计;
  • 逻辑严谨:精准筛选出X→Y的转会,避免了反向转会的错误统计;
  • 可读性强:每一步操作的目的清晰,后续维护更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:52:55