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

基于Make与Status复杂条件更新DataFrame的Type列值

解决方案:按品牌批量更新DataFrame的Type字段

原始数据

import pandas as pd
df = pd.DataFrame([('Tesla','Model3', '-', 'Motor'),
                  ('Tesla', 'ModelS', '-', 'MotorMD3'),
                  ('Tesla', 'ModelX', '-', 'MotorMD3'),
                  ('Tesla', 'ModelY', '-', 'Motor'),
                  ('Jeep',  'Wrangler','Grouped','Engine'),
                  ('Jeep',  'Compass', 'Grouped','EngineMD3'),
                  ('Jeep',  'Patriot', 'Grouped','Engine'),
                  ('Jeep',  'Cherokee','Grouped','Engine'),
                  ('Ford',  'Mustang', 'Grouped','Engine'),
                  ('Ford',  'F150',     'Grouped','Engine')  ],columns=['Make','Model','Status','Type'])

需求说明

  • 若某品牌(Make)的Status全为Grouped,且该品牌下存在任意车型(Model)的Type为EngineMD3,则将该品牌下所有车型的Type统一更新为EngineMD3
  • 若车型Status不为Grouped,Type保持原始值不变
  • 若品牌Status为Grouped但无EngineMD3车型,Type保持为Engine

实现方案

方案1:分组自定义函数处理

通过groupby按品牌分组,针对每个分组单独判断条件并更新:

def update_type_group(group):
    # 检查当前品牌所有车型的Status是否均为Grouped
    if group['Status'].eq('Grouped').all():
        # 检查组内是否存在EngineMD3类型
        if (group['Type'] == 'EngineMD3').any():
            group['Type'] = 'EngineMD3'
    return group

# 应用分组处理逻辑
df_updated = df.groupby('Make', group_keys=False).apply(update_type_group)

方案2:简洁版transform标记更新

利用transform生成每行的匹配标记,直接批量更新:

# 生成需要更新的行标记:Status为Grouped,且所属品牌存在EngineMD3车型
update_mask = (df['Status'] == 'Grouped') & df.groupby('Make')['Type'].transform(lambda x: (x == 'EngineMD3').any())

# 批量更新符合条件的行
df.loc[update_mask, 'Type'] = 'EngineMD3'

处理后结果

MakeModelStatusType
TeslaModel3-Motor
TeslaModelS-MotorMD3
TeslaModelX-MotorMD3
TeslaModelY-Motor
JeepWranglerGroupedEngineMD3
JeepCompassGroupedEngineMD3
JeepPatriotGroupedEngineMD3
JeepCherokeeGroupedEngineMD3
FordMustangGroupedEngine
FordF150GroupedEngine

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:50:24