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

如何基于Pandas DataFrame两个关联列循环计算生成新列

解决Pandas DataFrame自定义赋值问题

实现思路

不建议使用逐行循环实现,采用Pandas向量化分组操作效率更高,逻辑如下:

  • 按batter-pitcher字段分组,保证计算仅在同一个投打组合内生效
  • 每组内按投球顺序(pitch_number升序)排序
  • 标记每组内prev_count != '3--2'的行作为锚点,提取锚点的pitch_number值
  • 对每组内的空锚点值做反向填充,让所有prev_count == '3--2'的行都能获取到下方第一个符合要求的锚点pitch_number
  • 按给定公式计算pitches列的值

完整代码实现

构造示例数据

import pandas as pd
import numpy as np

data = {
    'player_name': ['Graveman, Kendall', 'Smyly, Drew', 'Graveman, Kendall', 'Maton, Phil', 'Martin, Chris', 'Urquidy, José', 'Urquidy, José', 'Urquidy, José', 'García, Yimi', 'García, Yimi', 'García, Yimi', 'García, Yimi', 'García, Yimi', 'Valdez, Framber', 'Valdez, Framber'],
    'batter-pitcher': ['501303---608665', '608665---592767', '592696---608665', '621020---664208', '514888---455119', '624585---664353', '624585---664353', '624585---664353', '594807---554340', '594807---554340', '594807---554340', '594807---554340', '594807---554340', '592696---664285', '518692---664285'],
    'pitch_number': [6,6,8,6,6,8,7,6,12,11,10,9,8,6,6],
    'count': ['3--2']*15,
    'prev_count': ['3--1', '2--2', '2--2', '3--1', '2--2', '3--2', '3--2', '3--1', '3--2', '3--2', '3--2', '3--2', '2--2', '2--2', '2--2']
}
df = pd.DataFrame(data, index=[62,4,186,87,252,171,177,192,191,198,209,219,229,10,57])

核心处理逻辑

# 按投打组合分组,每组内按投球序号升序排序
df = df.sort_values(['batter-pitcher', 'pitch_number'])

# 标记锚点投球序号,反向填充获取所有行对应的锚点值
df['anchor_pitch'] = df.groupby('batter-pitcher').apply(
    lambda x: np.where(x['prev_count'] != '3--2', x['pitch_number'], np.nan)
).explode().values
df['anchor_pitch'] = df.groupby('batter-pitcher')['anchor_pitch'].bfill()

# 按公式计算pitches列,仅count为3--2的行保留计算值
df['pitches'] = np.where(df['count'] == '3--2', df['pitch_number'] + 1 - df['anchor_pitch'], np.nan)

# 恢复原始索引顺序
df = df.loc[[62,4,186,87,252,171,177,192,191,198,209,219,229,10,57]]

结果验证

打印df[['pitch_number', 'prev_count', 'pitches']]即可查看结果,完全匹配示例要求:

  • 索引171的pitches值为3,177为2,192为1
  • 索引191的pitches值为5,229为1
  • 其余标注行的pitches值均为1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:04