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

如何基于Pandas中行的devisor_col值对所有列应用公式?

问题:批量用指定列的值对DataFrame其余列做除法运算

我有如下DataFrame:

+------+------+------+-------------+
|  A   |   B  |  C   | devisor_col |
+------+------+------+-------------+
|    2 |    4 |   10 |           2 |
|    3 |    3 |    9 |           3 |
|   10 |   25 |   40 |          10 |
+------+------+------+-------------+

需要用devisor_col列的值对其余所有列做除法运算,数据包含数千行和列,期望得到如下结果(注:原示例中列名V为笔误,修正为C):

+------+------+------+-------------+
| A    | B    | C    | devisor_col |
+------+------+------+-------------+
|    1 |    2 |    5 |           2 |
|    1 |    1 |    3 |           3 |
|    1 |  2.5 |    4 |          10 |
+------+------+------+-------------+

我尝试使用applymap方法但无法生效,代码如下:

modResult = my_df.applymap(lambda x: x/x["devisor_col"])

请问实现该需求的最优命令是什么?


最优解法:利用Pandas广播特性(高效适配大规模数据)

applymap是逐元素操作,无法在lambda中获取每行的devisor_col值,这是代码失效的核心原因。针对数千行/列的大规模数据,最优方案是直接使用Pandas的列运算广播机制,无需循环或apply类方法,性能更优。

代码实现:

# 筛选出需要处理的列(排除devisor_col)
target_cols = my_df.columns.drop('devisor_col')
# 对目标列执行除法,通过reshape实现广播匹配每行的除数
my_df[target_cols] = my_df[target_cols] / my_df['devisor_col'].values.reshape(-1, 1)

关键说明:

  1. reshape(-1,1)将devisor_col的一维数组转为二维列向量,触发Pandas的广播机制,让每行的所有目标列元素自动对应除以该行的devisor_col值
  2. 直接对列进行批量运算,比逐行/逐元素操作的效率高一个数量级,完全适配大规模数据场景

如果需要保留原DataFrame,生成新的结果集,可以先复制原数据:

modResult = my_df.copy()
target_cols = modResult.columns.drop('devisor_col')
modResult[target_cols] = modResult[target_cols] / modResult['devisor_col'].values.reshape(-1, 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:10:17