选择性累积和的向量化实现:Pandas Series与NumPy数组处理
嘿,我来帮你搞定这个向量化的实现!咱们完全不用写显式循环,靠Pandas和NumPy的内置向量化操作就能高效完成需求,具体步骤如下:
1. 先明确需求对应的逻辑
比如你的输入里,series_example[0]是[1,3,2],对应arr_example的索引1(值0.5)、3(值0.1)、2(值0.25),累积和就是0.5 → 0.5+0.1=0.6 → 0.6+0.25=0.85,和你给出的示例输出完全匹配。
2. 向量化实现代码
先导入需要的库,然后定义你的输入数据:
import pandas as pd import numpy as np series_example = pd.Series([[1, 3, 2], [1, 2]]) arr_example = np.array([3., 0.5, 0.25, 0.1])
接下来是核心的向量化操作:
# 第一步:展开Series中的每个索引列表,同时保留原Series的索引(用来分组) expanded_indices = series_example.explode().astype(int) # 第二步:根据展开后的索引,提取arr_example中对应的数值 corresponding_values = arr_example[expanded_indices] # 第三步:按原索引分组,计算每组的累积和,再把每组的结果重新组合成列表 result_series = corresponding_values.groupby(expanded_indices.index).cumsum()\ .groupby(expanded_indices.index).apply(list)
运行后,result_series就是你要的结果:
print(result_series) # 输出: # 0 [0.5, 0.6, 0.85] # 1 [0.5, 0.75] # dtype: object
3. 为什么这是向量化方案?
这里的explode、数组索引取值、groupby和cumsum都是Pandas/NumPy底层优化过的向量化操作,没有显式的Python循环(比如for遍历每个元素),在数据量较大时,效率会比非向量化的实现高出一个数量级。如果你的输入Series行数特别多,这个方案的优势会非常明显~
内容的提问来源于stack exchange,提问作者David Masip
相关产品推荐
相关产品推荐

