如何在Pandas DataFrame中获取指定年份最后一行对应值并为欧洲杯赛事数据添加赛事冠军列
嘿,我来帮你搞定这几个Pandas操作问题,刚好之前处理过类似的赛事数据,思路很清晰~
针对欧洲杯赛事DataFrame的解决方案
先假设你的DataFrame结构和示例一致,我们从基础操作开始拆解:
1. 获取各年份的赛事冠军信息
因为每个年份的冠军是该年份最后一场比赛的胜者,我们可以通过按年份分组后取每组最后一行的winner列来实现:
import pandas as pd # 构造示例数据(替换成你自己的DataFrame即可) data = { 'year': [1960, 1960, 1960, 1960], 'home_team': ['Czechoslovakia', 'France', 'France', 'Russia'], 'away_team': ['Russia', 'Yugoslavia', 'Czechoslovakia', 'Yugoslavia'], 'home_score': [0, 4, 0, 2], 'away_score': [3, 5, 2, 1], 'winner': ['Russia', 'Yugoslavia', 'Czechoslovakia', 'Russia'] } df = pd.DataFrame(data) # 获取各年份冠军 yearly_champions = df.groupby('year').last()['winner'] # 转成更易读的DataFrame格式(可选步骤) yearly_champions_df = yearly_champions.reset_index().rename(columns={'winner': 'tournament_winner'}) print(yearly_champions_df)
运行后会输出每个年份对应的冠军,比如1960年的结果就是Russia。
2. 给DataFrame添加tournament_winner新列
如果想让原DataFrame的每一行都带上对应年份的冠军信息,用transform方法最方便——它会把分组的结果广播到该组的所有行:
# 直接给原DataFrame添加新列 df['tournament_winner'] = df.groupby('year')['winner'].transform(lambda x: x.iloc[-1]) print(df)
这样1960年的四行数据,tournament_winner列都会显示Russia,实现了年份与冠军的关联。
如果是先对年份做了聚合操作(比如统计每年比赛场次),再想添加冠军列,可以用合并的方式:
# 先按年份做聚合统计 yearly_stats = df.groupby('year').size().reset_index(name='match_count') # 和冠军表合并 yearly_stats = yearly_stats.merge(yearly_champions_df, on='year', how='left') print(yearly_stats)
3. 获取指定年份最后一行的数值
比如要找1960年最后一场比赛的信息,直接用布尔筛选加tail(1)即可:
target_year = 1960 # 获取该年份最后一行数据 last_match = df[df['year'] == target_year].tail(1) # 提取具体字段,比如胜者 champion = last_match['winner'].values[0] # 或者直接打印整行信息 print(f"{target_year}年最后一场比赛信息:\n{last_match}")
这样就能精准定位到指定年份的最后一场比赛数据啦~
内容的提问来源于stack exchange,提问作者proticles
相关产品推荐
相关产品推荐

