如何高效基于索引在零值Pandas Series指定位置填充数值?
高效填充Pandas指定索引位置的数值
你需要在全零的Series中,根据给定索引快速填充对应数值,原方法的concat+isin在大数据量下效率较低,以下是两种更高效的实现方式:
方法1:使用
Series.update()(原地修改,性能最优)update是Pandas专门用于按索引匹配更新值的方法,原地修改原Series,无需额外的拼接和排序操作,效率最高。如果需要保留原Series,先创建副本再操作:import pandas as pd dict_0 = {x: 0 for x in range(1, 11)} ser_0 = pd.Series(dict_0) dict_vals = {2:0.1, 5:0.9} ser_vals = pd.Series(dict_vals) # 保留原ser_0的情况 ser_composed = ser_0.copy() ser_composed.update(ser_vals)方法2:使用
loc索引直接赋值
复制原Series后,通过loc定位目标索引批量赋值,操作直观且性能优异:ser_composed = ser_0.copy() ser_composed.loc[ser_vals.index] = ser_vals
性能说明
这两种方法都基于Pandas的矢量操作和索引对齐特性,时间复杂度为O(n)(主要开销是复制Series和索引匹配)。而原方法的isin会生成布尔掩码,concat需要合并两个Series再排序,时间复杂度更高,在处理百万级以上数据时,性能差距会非常显著。
内容的提问来源于stack exchange,提问作者Jawis
相关产品推荐
相关产品推荐

