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

如何在Pandas分组后直接更新原DataFrame中的数值?

问题描述

现有如下DataFrame:

import pandas as pd
df = pd.DataFrame({'dim_unit' :['m', 'cm', 'cm', 'm', 'ft', 'in'], 'Length' : [1,2,3,4,5,6], 'Width' : [5,6,7,8,9,10] }) 

需求是按dim_unit分组,对Length和Width列应用对应缩放因子,将所有数据转换为统一维度(实际场景包含更多单位和待转换列)。

尝试过以下方法但存在问题:

  • 用groupby获取分组后计算转换值,但无法更新原DataFrame:
g= df.groupby('dim_unit')
g.get_group('cm')["Width"].apply(lambda x: x*100)
  • 尝试用transform替代apply无效果;新增列的方式会生成大量含NaN的列,后续合并繁琐:
df['len_cm_to_m']= df.get_group('cm')["Width"].apply(lambda x: x*100)

希望找到直接更新原DataFrame数值的方法,或通过匹配索引更新的方案。

解决方案

方法1:单位转换映射字典 + 广播计算(推荐)

先定义单位到目标单位(以米为例)的转换因子字典,直接按行匹配因子对多列批量计算,无需分组,效率更高且无NaN:

# 定义转换因子:key为原单位,value为转换为米的系数
conversion_factors = {
    'm': 1,
    'cm': 0.01,
    'ft': 0.3048,
    'in': 0.0254
}

# 获取每行对应的转换因子
df['conversion_factor'] = df['dim_unit'].map(conversion_factors)

# 批量转换Length和Width列(直接覆盖原列,也可新增列)
cols_to_convert = ['Length', 'Width']
df[cols_to_convert] = df[cols_to_convert].mul(df['conversion_factor'], axis=0)

# 可选:删除临时转换因子列
df.drop('conversion_factor', axis=1, inplace=True)

方法2:groupby结合transform更新原列

若需保留分组逻辑,可通过transform返回与原索引对齐的结果,直接赋值更新原列:

def convert_group(group):
    unit = group['dim_unit'].iloc[0]
    factors = {
        'm': 1,
        'cm': 0.01,
        'ft': 0.3048,
        'in': 0.0254
    }
    factor = factors[unit]
    group[['Length', 'Width']] = group[['Length', 'Width']] * factor
    return group[['Length', 'Width']]

# 用transform获取对齐后的转换结果,直接覆盖原列
df[['Length', 'Width']] = df.groupby('dim_unit')[['Length', 'Width']].transform(convert_group)

方法3:索引匹配精准更新

针对复杂转换逻辑,可先遍历分组计算转换值,再通过索引定位更新原DataFrame:

# 复制原DataFrame存储转换后数据
converted_df = df.copy()

# 遍历每个分组,按索引更新对应行
for unit, group in df.groupby('dim_unit'):
    factor = {
        'm': 1,
        'cm': 0.01,
        'ft': 0.3048,
        'in': 0.0254
    }[unit]
    converted_df.loc[group.index, ['Length', 'Width']] = group[['Length', 'Width']] * factor

# 替换原df(或直接使用converted_df)
df = converted_df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:15