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会变成这样:
| val1 | val2 | val3 | col1 | new_col1 | new_col_product |
|---|---|---|---|---|---|
| 3 | 1 | 1 | something | matched_string | 3 |
| 4 | 2 | 1 | sth else | NaN | NaN |
| 2 | 2 | 3 | something | matched_string | 12 |
| 3 | 1 | 1 | sth else | NaN | NaN |
| 2 | 2 | 1 | something | matched_string | 4 |
原理很简单:Pandas的向量化操作会自动逐行计算乘积,loc会精准定位到满足掩码的行赋值,完全不会影响其他行的数据~
内容的提问来源于stack exchange,提问作者MaMo
相关产品推荐
相关产品推荐

