基于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
相关产品推荐
相关产品推荐

