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

如何使用Pandas筛选DataFrame指定列包含特定字符串的行并返回结果

问题原因

  1. 字符串匹配逻辑错误:if "FIFA" in df['tournament']是判断「FIFA」是否为tournament列的索引值,不是判断列内容中是否包含FIFA字符串,完全不符合筛选需求。
  2. 业务逻辑偏差:原有代码最终计算的是单场总进球最高的场次,和你要实现的「统计单个国家在FIFA赛事中累计总进球」的需求不符。
  3. 日期格式参数错误:pd.to_datetime里的格式符填写错误,%M代表分钟,%D是%m/%d/%y的缩写,如果你原始数据的日期是「年/月/日」格式,需要替换为%Y/%m/%d。

修复后的代码

import pandas as pd
import numpy as np

filename = "results.csv"
df = pd.read_csv(filename)

# 修正日期转换格式,若原始日期为横杠分隔可将/替换为-
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d')

# 先筛选2010年之后、赛事名称包含FIFA的数据集,case=False表示忽略大小写匹配
sub_df = df[(df['date'].dt.year >= 2010) & (df['tournament'].str.contains('FIFA', case=False))]

if len(sub_df) == 0:
    print("no results")
else:
    # 分别统计主客场的进球数,合并计算每个国家的累计总进球
    home_goals = sub_df.groupby('home_team')['home_score'].sum().reset_index(name='goals')
    away_goals = sub_df.groupby('away_team')['away_score'].sum().reset_index(name='goals')
    total_goals = pd.concat([home_goals, away_goals]).groupby('home_team')['goals'].sum().reset_index()
    total_goals.columns = ['country', 'total_goals']

    # 输出总进球最多的国家
    max_goal_country = total_goals[total_goals['total_goals'] == total_goals['total_goals'].max()]
    print(max_goal_country)

补充说明

如果不需要统计国家累计进球,只需要找单场总进球最高的FIFA赛事场次,可以把else分支里的统计代码替换为:

# 计算单场总进球,筛选最高值对应的场次
sub_df['total_score'] = sub_df['home_score'] + sub_df['away_score']
max_match = sub_df[sub_df['total_score'] == sub_df['total_score'].max()]
print(max_match)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:00