使用Pandas从Excel筛选数据并统计2010年以来FIFA赛事进球最多的国家
修正思路
你的现有代码存在两个核心错误:
- 你定义的
total_score是单场比赛两队的总进球数,不是单个国家的累计进球,和统计目标完全不符 - 日期解析的格式符配置错误:
%M代表分钟、%D是月/日/年的缩写,会导致日期解析异常;同时str.contains遇到空值会返回NaN,会导致筛选结果不全
完整修正代码
import pandas as pd # 1. 日期解析,自动适配格式,异常值转为空值 df['date'] = pd.to_datetime(df['date'], errors='coerce') # 2. 筛选2010年及以后、赛事名称包含FIFA的比赛(忽略大小写、空值默认返回False) sub_df = df[ (df['date'].dt.year >= 2010) & (df['tournament'].str.contains('FIFA', case=False, na=False)) ].copy() # 3. 拆分主客场数据,把每场比赛拆为两条记录,分别对应主队、客队的进球 home_goals = sub_df[['home_team', 'home_score']].rename(columns={'home_team': 'country', 'home_score': 'goals'}) away_goals = sub_df[['away_team', 'away_score']].rename(columns={'away_team': 'country', 'away_score': 'goals'}) all_goals = pd.concat([home_goals, away_goals], ignore_index=True) # 4. 按国家分组求和,统计累计进球数,降序排序 country_goals_total = all_goals.groupby('country')['goals'].sum().reset_index() country_goals_total = country_goals_total.sort_values('goals', ascending=False) # 5. 取累计进球最多的国家 max_goals_country = country_goals_total.iloc[0] # 输出结果 print(f"2010年以来FIFA赛事中累计进球最多的国家是:{max_goals_country['country']},总进球数为:{max_goals_country['goals']}")
逻辑说明
- 拆分主客场数据是核心步骤:每场比赛有两个参赛队,两队的进球需要分别统计归属,才能按国家累加
str.contains添加case=False适配大小写混写的赛事名称,na=False避免字段空值导致筛选报错- 分组求和后直接取排序后的第一条结果,就是累计进球最多的国家
内容的提问来源于stack exchange,提问作者user3042226
相关产品推荐
相关产品推荐

