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

Pandas按Con_Num分组取Is_Prim=Yes行值批量更新同组Con_Type列

解决方法

方法1:使用map映射(更简洁高效)

先构造每个Con_Num对应的主类型映射表,再直接赋值:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({'Con_Num': [1, 1, 1, 1, 2, 2, 2, 2, 3, 3], 
    'Con_Type': ['A', 'A', 'B', 'C', 'A', 'B', 'B', 'C', 'C', 'C'],
    'Is_Prim':['No','Yes','No','No','No','No','No','Yes','No','Yes']})

# 构造Con_Num到Is_Prim=Yes对应Con_Type的映射关系
prim_type_map = df[df['Is_Prim'] == 'Yes'].set_index('Con_Num')['Con_Type']
# 批量替换Con_Type列
df['Con_Type'] = df['Con_Num'].map(prim_type_map)

运行后得到的df完全符合预期输出,除Con_Type外的所有列都会完整保留,不会被改动。

方法2:使用groupby + transform(适合更复杂的分组逻辑)

如果需要沿用transform写法,可以按如下逻辑调整,获取分组内对应Is_Prim=Yes的取值:

df['Con_Type'] = df.groupby('Con_Num')['Con_Type'].transform(
    lambda ser: ser[df.loc[ser.index, 'Is_Prim'] == 'Yes'].iloc[0]
)

说明

两种方法都默认每个Con_Num分组下有且仅有一行Is_Prim = 'Yes'的记录,符合示例场景。如果存在多个Yes的情况,可以自行调整取值逻辑(比如取第一个、去重等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:39:02