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

如何用更Pythonic的方法统计pandas DataFrame各队进球区间分布并生成新列

实现方法

你可以用pandas内置的向量化函数实现,全程不需要手写循环和条件判断,代码更简洁,执行效率也更高:

import pandas as pd

# 构造示例数据,实际使用时替换成自己的df即可
df = pd.DataFrame({
    'player_id': ['ply_1', 'ply_2', 'ply_3', 'ply_4', 'ply_5'],
    'team': ['Arsenal', 'Arsenal', 'Chelsea', 'Chelsea', 'Arsenal'],
    'goals': [100, 2, 21, 13, 50]
})

# 1. 定义进球区间,步长10,覆盖0-100范围
bins = list(range(0, 101, 10))
# 2. 给每个球员的进球对应到区间索引(0-9,刚好匹配你要的数组下标)
# right=True表示区间右闭,匹配你0<进球<=10算第0位的需求
df['bin_idx'] = pd.cut(df['goals'], bins=bins, labels=range(10), right=True)
# 3. 按球队分组统计每个区间的人数,转成{球队: 分布列表}的字典
team_dist = df.groupby('team')['bin_idx'].value_counts().unstack(fill_value=0).agg(list, axis=1).to_dict()
# 4. 把分布映射回原DataFrame生成新列
df['goals_distribution_by_team'] = df['team'].map(team_dist)
# 可选:删除中间生成的bin_idx列
df.drop('bin_idx', axis=1, inplace=True)

边界调整说明

如果你的需求需要包含进球数为0的球员,只要修改bins的左边界即可:

bins = [-0.1] + list(range(10, 101, 10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:39:02