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

如何按Car#分组为DataFrame新增Baseline列并填充对应基准值

问题描述

我有一个包含Car#、measurement_type、measurement_value列的DataFrame,数据如下:

Car#     measurement_type      measurement_value 
1         back to back1                10.3
1         back to back2                10.2
1         baseline                     10.4
2         back to back1                11.5
2         back to back2                10.8
2         baseline                     10.9    

希望新增一列Baseline,填充每辆车对应的baseline值,期望输出:

Car#     measurement_type      measurement_value      Baseline
1         back to back1                10.3              10.4
1         back to back2                10.2              10.4  
1         baseline                     10.4              10.4
2         back to back1                11.5              10.9
2         back to back2                10.8              10.9
2         baseline                     10.9              10.9

我尝试了以下代码但无法正常运行:

grouped = df.groupby('car#')
for i in grouped:
    if df['measurement_type'] == 'baseline':
        df['Baseline'] = df.loc[df['measurement_type'] == 'baseline','measurement_value']
解决方案

问题分析

你的代码存在两个核心问题:

  1. 分组循环逻辑错误:groupby返回的是(组标识, 子DataFrame)的元组,你的循环没有对每个分组单独处理,而是直接操作整个原DataFrame。
  2. 赋值逻辑错误:直接给df['Baseline']赋值时,没有按Car#匹配对应baseline值,会导致值无法正确对应到每辆车。

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

先提取每个Car#对应的baseline值生成字典,再通过map快速匹配填充:

# 提取每个Car#的baseline值,转为字典
baseline_map = df[df['measurement_type'] == 'baseline'].set_index('Car#')['measurement_value'].to_dict()
# 给新列赋值
df['Baseline'] = df['Car#'].map(baseline_map)

方法2:使用groupby.transform

利用transform对每个分组广播baseline值,适合需要在分组内做更多操作的场景:

df['Baseline'] = df.groupby('Car#').apply(
    lambda group: group['measurement_value'][group['measurement_type'] == 'baseline'].iloc[0]
).reset_index(level=0, drop=True)

方法3:使用merge

通过合并操作将baseline数据关联到原DataFrame,逻辑直观:

# 提取baseline数据并重命名列
baseline_df = df[df['measurement_type'] == 'baseline'][['Car#', 'measurement_value']].rename(columns={'measurement_value': 'Baseline'})
# 左连接合并
df = df.merge(baseline_df, on='Car#', how='left')

以上三种方法都能实现需求,其中map方法性能最优,适合处理大数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:50:21