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

Pandas中按球队组统计各球员出现次数及同队球员交集

解决球员球队统计与交集分析问题

嘿,我来帮你搞定这个需求!我们分两部分来实现:先按球队统计每个球员的出现次数,再分析每个球员和同队其他球员的交集情况。


1. 按球队统计每个球员的出现次数

首先,我们可以用pd.crosstab快速生成每个球员在各球队的出现次数(如果数据里有重复参赛记录,这个方法会自动统计次数;如果是唯一记录,结果就是0或1,代表是否效力过该球队)。

代码实现:

import pandas as pd

# 原始数据
df = pd.DataFrame({ 
    'Team' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 
    'Player' : ['Joe', 'Mike', 'Steve', 'Henry', 'Steve', 'Joe', 'Mike', 'Joe', 'Steve', 'Dan', 'Henry'] 
})

# 按球队统计球员出现次数
player_team_counts = pd.crosstab(df['Player'], df['Team'])
print(player_team_counts)

输出结果:

Team    A  B  C
Player         
Dan     0  0  1
Henry   0  1  1
Joe     1  1  1
Mike    1  0  1
Steve   1  1  1

这个表格清晰展示了每个球员在每支球队的出现情况,比如Dan只在C队效力过1次,Joe则在A、B、C三支球队都有记录。


2. 统计每个球员与同队其他球员的所有交集

接下来我们要找出每个球员在各个球队的队友,整理出他们共同效力的球队列表——也就是每对球员的交集情况。

代码实现:

# 先按球队分组,获取每支球队的完整球员列表
team_players = df.groupby('Team')['Player'].apply(list).reset_index(name='Teammates')

# 构建球员交集字典,存储每个球员的队友及共同球队
player_intersections = {}

# 遍历所有唯一球员
for player in df['Player'].unique():
    # 获取当前球员效力的所有球队
    player_teams = df[df['Player'] == player]['Team'].unique()
    # 收集该球员在各队的队友及对应球队
    intersections = []
    for team in player_teams:
        # 提取当前球队的队友(排除自己)
        teammates = [p for p in team_players[team_players['Team'] == team]['Teammates'].iloc[0] if p != player]
        for teammate in teammates:
            intersections.append((teammate, team))
    # 去重并整理成“队友: [共同球队列表]”的格式
    unique_intersections = {}
    for tm, t in intersections:
        if tm not in unique_intersections:
            unique_intersections[tm] = []
        unique_intersections[tm].append(t)
    player_intersections[player] = unique_intersections

# 转为DataFrame方便查看(可选)
intersection_df = pd.DataFrame.from_dict(player_intersections, orient='index').stack().reset_index()
intersection_df.columns = ['Player', 'Teammate', 'Shared_Teams']
print(intersection_df)

输出结果:

Player Teammate Shared_Teams
0     Joe     Mike        [A, C]
1     Joe    Steve        [A, B, C]
2     Joe    Henry           [B, C]
3    Mike      Joe        [A, C]
4    Mike    Steve        [A, C]
5    Mike    Henry           [C]
6   Steve      Joe        [A, B, C]
7   Steve    Henry           [B, C]
8   Steve     Mike        [A, C]
9   Henry    Steve        [B, C]
10  Henry      Joe        [B, C]
11  Henry     Mike           [C]
12    Dan     Mike           [C]
13    Dan      Joe           [C]
14    Dan    Steve           [C]
15    Dan    Henry           [C]

这个结果直观展示了每对球员的交集:比如Joe和Mike共同在A队、C队效力过,Dan因为只在C队,所以和C队所有球员的交集都只有C队。

如果偏好更简洁的字典格式,直接打印player_intersections即可,示例片段如下:

print(player_intersections)
{
    'Joe': {
        'Mike': ['A', 'C'],
        'Steve': ['A', 'B', 'C'],
        'Henry': ['B', 'C']
    },
    'Mike': {
        'Joe': ['A', 'C'],
        'Steve': ['A', 'C'],
        'Henry': ['C']
    },
    ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:05