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

基于分组最小值为DataFrame新增列:棒球出勤数据处理需求

搞定棒球比赛DataFrame的新增列需求

嘿,我来帮你实现这两个新增列的需求,假设你用的是pandas(毕竟处理DataFrame它是首选),下面是一套清晰易维护的实现方案:

第一步:先把日期列转成datetime格式

这是关键前提,只有日期是datetime类型,我们才能准确按年份分组并找到首场比赛:

import pandas as pd

# 假设你的日期列名叫game_date,先转成datetime格式
df['game_date'] = pd.to_datetime(df['game_date'])

第二步:生成opening_day二元列

我们先按年份分组,找到每个年度的最早比赛日期,然后给对应行标记1,其他行标记0:

# 提取每个年度的首场比赛日期
first_game_dates = df.groupby(df['game_date'].dt.year)['game_date'].min()

# 用isin判断每行是否是年度首场,转成int类型的1/0
df['opening_day'] = df['game_date'].isin(first_game_dates).astype(int)

第三步:填充opening_day_attendance列

接下来我们要把每个年度首场比赛的出勤数,填充到该年度的所有行里:

# 先筛选出所有opening_day为1的行,按年份提取出勤数(假设出勤列叫attendance)
yearly_opening_attendance = df[df['opening_day'] == 1].set_index(df['game_date'].dt.year)['attendance']

# 用年份映射,把对应年度的首场出勤数填充到所有行
df['opening_day_attendance'] = df['game_date'].dt.year.map(yearly_opening_attendance)

更紧凑的transform写法(可选)

如果你喜欢用一行式的分组处理,也可以用transform来简化代码,逻辑是完全一致的:

# 生成opening_day列
df['opening_day'] = (df['game_date'] == df.groupby(df['game_date'].dt.year)['game_date'].transform('min')).astype(int)

# 生成opening_day_attendance列
df['opening_day_attendance'] = df.groupby(df['game_date'].dt.year)['attendance'].transform(
    lambda group: group[group.index == group.idxmin()].values[0]
)

这样处理后,你就得到了想要的两列:opening_day精准标记年度首场比赛(1是,0否),opening_day_attendance则把对应年度首场的出勤数同步到该年度的每一行里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:17:25