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

Pandas DataFrame分组处理:提取子串计算生成baz列的高效方案

高效生成Pandas DataFrame新列baz的解决方案

给定包含foo和bar列的Pandas DataFrame df:

foo       bar
0   2410_030_GCD  0.012093
1   2410_030_GCD  0.012789
2   2410_030_GCD  0.014205
3   2410_010_GCD  0.016280
4   2410_010_GCD  0.019738
5   6122_020_LCM  0.025806
6   6122_020_LCM  0.030336
7   6122_020_LCM  0.034753
8   6122_020_LCM  0.042229
9   3456_030_SGD  0.025792
10  3456_030_SGD  0.030255
11  3456_030_SGD  0.034683
12  3456_030_SGD  0.042194

需求:为foo值相同的行组生成新列baz,计算逻辑为:从foo提取前4位数字子串→转为float后除以1000→用bar列值除以该结果,且不能添加其他中间列,需适配大数据量的高效实现。

高效实现代码

df['baz'] = df['bar'] / (df['foo'].str[:4].astype(float) / 1000)

实现说明

  1. 矢量化操作,性能最优:整个计算过程完全基于Pandas的矢量化API,避免了groupby逐组循环的开销,处理百万级以上数据时效率远高于循环方案。
  2. 无中间列,符合要求:直接通过链式计算生成baz列,不产生任何临时中间列,不会额外占用内存。
  3. 精准高效提取子串:利用str[:4]直接截取foo的前4位字符,比正则表达式匹配更高效(已知foo格式固定为前4位数字开头)。

运行后得到的结果与示例一致:

foo       bar        baz
0   2410_030_GCD  0.012093  0.0050178
1   2410_030_GCD  0.012789  0.0053066
2   2410_030_GCD  0.014205  0.0058942
3   2410_010_GCD  0.016280  0.0067552
4   2410_010_GCD  0.019738  0.0081900
5   6122_020_LCM  0.025806  0.0042153
6   6122_020_LCM  0.030336  0.0049552
7   6122_020_LCM  0.034753  0.0056767
8   6122_020_LCM  0.042229  0.0068979
9   3456_030_SGD  0.025792  0.0074630
10  3456_030_SGD  0.030255  0.0087543
11  3456_030_SGD  0.034683  0.0100356
12  3456_030_SGD  0.042194  0.0122089

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:03:35