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

Python:基于条件一次性向DataFrame多列插入值含乘积计算

基于掩码插入多列乘积到Pandas DataFrame

没问题,这事儿用Pandas的向量化操作就能轻松搞定,不用折腾循环~结合你的示例数据一步步来:

首先先把你的示例DataFrame写出来方便演示:

import pandas as pd

df = pd.DataFrame({
    'val1': [3,4,2,3,2],
    'val2': [1,2,2,1,2],
    'val3': [1,1,3,1,1],
    'col1': ['something', 'sth else', 'something', 'sth else', 'something']
})

先回顾你已经实现的普通字符串插入

假设你已经用掩码完成了普通字符串插入,比如给col1为something的行插入固定字符串到新列new_col1,代码大概是这样:

# 定义掩码条件
mask_something = df['col1'] == 'something'

# 插入普通字符串
df.loc[mask_something, 'new_col1'] = 'matched_string'

重点:插入多列的乘积到目标列

现在要给满足掩码的行插入val1*val2*val3的乘积,直接用loc定位掩码行,然后计算对应列的乘积赋值就行,这里给你三种常用方法:

方法1:直接逐列相乘(适合列数少的场景)

# 给满足mask_something的行插入val1、val2、val3的乘积到new_col_product
df.loc[mask_something, 'new_col_product'] = df.loc[mask_something, 'val1'] * df.loc[mask_something, 'val2'] * df.loc[mask_something, 'val3']

方法2:用prod()方法(更适合多列场景)

如果需要乘积的列很多,一个个写乘法太麻烦,用prod(axis=1)可以直接计算每行的乘积:

df.loc[mask_something, 'new_col_product'] = df.loc[mask_something, ['val1', 'val2', 'val3']].prod(axis=1)

方法3:用np.where统一处理(保留其他行的默认值)

如果想给不满足掩码的行设置默认值(比如NaN),可以用np.where一次性完成赋值:

import numpy as np

df['new_col_product'] = np.where(mask_something, df['val1']*df['val2']*df['val3'], np.nan)

最终效果

运行完上面的代码后,你的DataFrame会变成这样:

val1val2val3col1new_col1new_col_product
311somethingmatched_string3
421sth elseNaNNaN
223somethingmatched_string12
311sth elseNaNNaN
221somethingmatched_string4

原理很简单:Pandas的向量化操作会自动逐行计算乘积,loc会精准定位到满足掩码的行赋值,完全不会影响其他行的数据~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:56