如何基于指定条件为已有Pandas DataFrame新增Race列
你使用where的方法不符合需求有两个核心原因:
pd.DataFrame.where的逻辑是「条件成立保留原值,条件不成立使用填充值」,你写的参数逻辑完全相反- 没有按
EVENT_ID分组处理,无法实现每个赛事单独匹配获胜场次的SELECTION_TRAP值
实现方案
方式一:全量填充Race列后过滤
如果需要先给所有行(包括WIN_LOSE=0的行)都补全对应赛事的Race值,再过滤保留获胜行,用下面的代码:
# 按EVENT_ID分组,将每组WIN_LOSE=1对应的SELECTION_TRAP赋值给组内所有行的Race列 df['Race'] = df.groupby('EVENT_ID')['SELECTION_TRAP'].transform( lambda s: s[df.loc[s.index, 'WIN_LOSE'] == 1].iloc[0] ) # 过滤保留WIN_LOSE=1的行 df = df[df['WIN_LOSE'] == 1].reset_index(drop=True)
方式二:直接筛选后生成Race列
因为你最终只保留WIN_LOSE=1的行,这些行的SELECTION_TRAP本身就是要赋值给Race的值,可以直接简化实现:
# 先筛选获胜行,再直接赋值Race列等于SELECTION_TRAP df = df[df['WIN_LOSE'] == 1].copy() df['Race'] = df['SELECTION_TRAP'] df = df.reset_index(drop=True)
两种方式运行后得到的结果都和你给出的预期输出一致。
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

