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

基于Pandas布尔Series实现多Series条件除法运算求助

批量处理Pandas条件比值计算的解决方案

嘿,我懂你现在的困扰——逐个处理SKU效率太低了对吧?其实Pandas自带的向量化运算能力就能轻松实现批量处理,根本不用循环每个SKU。下面一步步给你讲怎么做:

先确保数据对齐

首先得把三个数据集的SKU对应上,最稳妥的方式是把SKU设为索引,这样后续运算会自动匹配对应SKU的数据:

# 将data_SKU1和data_SKU2的SKU列设置为索引
data_SKU1 = data_SKU1.set_index('SKU')
data_SKU2 = data_SKU2.set_index('SKU')
# 你的flag_Data已经是用SKU做索引了,这步可以跳过

一行代码搞定批量计算

这里有两种简单的方法,都能实现批量处理:

方法一:用numpy.where做条件判断

import numpy as np
import pandas as pd

# 直接生成结果Series
result_series = np.where(
    flag_Data,  # 布尔条件
    data_SKU1['Weight1'] / data_SKU2['Weight2'],  # 条件为True时的运算
    data_SKU2['Weight2'] / data_SKU1['Weight1']   # 条件为False时的运算
)
# 把结果转成带SKU索引的Pandas Series
result_series = pd.Series(result_series, index=flag_Data.index, name='Ratio')

方法二:用Pandas自带的where方法

# 先默认计算Weight1/Weight2,再把flag为False的位置替换成反向比值
result_series = (data_SKU1['Weight1'] / data_SKU2['Weight2']).where(
    flag_Data, 
    data_SKU2['Weight2'] / data_SKU1['Weight1']
)

验证示例结果

用你提供的测试数据,运行后得到的结果应该是:

  • SKU 1234: 20/22 ≈ 0.9091
  • SKU 1235: 35/30 ≈ 1.1667
  • SKU 111: 40/47 ≈ 0.8511
  • SKU 101: 87/23 ≈ 3.7826

直接打印result_series就能看到完整结果啦!

另外提醒一下:如果存在SKU不匹配的情况,运算后对应的位置会出现NaN,你可以根据需求用fillna()处理,或者提前检查三个数据集的SKU是否完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:30