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

如何在Pandas中按组替换DataFrame的列值?

Pandas 按(Name, Thing)分组更新flag列

问题背景

输入DataFrame:

Name    Thing   type    flag
Steve   Car     High    NULL
Steve   Car     Low     NULL
Steve   Bike    Low     NULL
Steve   Bike    Avg     X
Steve   Plane   High    NULL
Steve   Plane   Low     NULL

更新规则

  • 针对每个(Name, Thing)分组:
    1. 若分组内同时存在Low和Avg类型,将这两类行的flag设为X
    2. 若分组内同时存在High和Avg类型,将这两类行的flag设为X

预期输出

Name    Thing   type    flag
Steve   Car     High    NULL
Steve   Car     Low     NULL
Steve   Bike    Low     X
Steve   Bike    Avg     X
Steve   Plane   High    NULL
Steve   Plane   Low     NULL

已尝试的错误代码

df['flag'] = df['flag'].mask((df['type'] == 'Low') | (df['type'] == 'Avg'), 'X').groupby(df(['name','thing'])).transform('any')

正确实现方案

问题分析

原代码存在两处问题:

  1. 语法错误:groupby(df(['name','thing']))应为groupby(['Name','Thing'])(注意列名大小写和索引语法)
  2. 逻辑偏差:transform('any')无法实现“分组满足条件才更新对应行”的需求,需先判断分组特征再针对性更新

代码实现

import pandas as pd

# 构造输入数据(Pandas中用pd.NA表示空值)
df = pd.DataFrame({
    'Name': ['Steve', 'Steve', 'Steve', 'Steve', 'Steve', 'Steve'],
    'Thing': ['Car', 'Car', 'Bike', 'Bike', 'Plane', 'Plane'],
    'type': ['High', 'Low', 'Low', 'Avg', 'High', 'Low'],
    'flag': [pd.NA, pd.NA, pd.NA, 'X', pd.NA, pd.NA]
})

def process_group(group):
    group_types = group['type'].unique()
    # 检查分组是否满足任一更新条件
    has_low_avg = ('Low' in group_types) and ('Avg' in group_types)
    has_high_avg = ('High' in group_types) and ('Avg' in group_types)
    
    if has_low_avg:
        group.loc[group['type'].isin(['Low', 'Avg']), 'flag'] = 'X'
    if has_high_avg:
        group.loc[group['type'].isin(['High', 'Avg']), 'flag'] = 'X'
    return group

# 按(Name, Thing)分组处理
df = df.groupby(['Name', 'Thing'], group_keys=False).apply(process_group)

print(df)

代码说明

  • groupby(['Name', 'Thing']):按指定维度对数据分组
  • 自定义process_group函数:对每个分组检查是否包含目标类型组合,再更新对应行的flag值
  • group_keys=False:避免分组键被添加为结果的额外列

运行结果

Name  Thing  type  flag
0  Steve    Car  High  <NA>
1  Steve    Car   Low  <NA>
2  Steve   Bike   Low     X
3  Steve   Bike   Avg     X
4  Steve  Plane  High  <NA>
5  Steve  Plane   Low  <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:31