Pandas DataFrame使用reindex时超范围索引填充边界值实现方法
实现方法
你可以通过以下两种方案实现需求:
方案1:链式调用填充方法(适合原数据无空值的简单场景)
reindex后组合使用前向填充ffill()和后向填充bfill()即可:
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({'Col1': ['v2', 'v3', 'v4', 'v5']}, index=[2,3,4,5]) # 执行reindex+填充 result = df1.reindex([1,2,3,4,5,6]).ffill().bfill()
逻辑说明:
- 直接
reindex会给不存在的索引位置赋值NaN ffill()会用前一个有效值填充空缺,因此大于原最大索引5的位置6会被填充为v5bfill()会用后一个有效值填充空缺,因此小于原最小索引2的位置1会被填充为v2
方案2:按索引范围精准赋值(适合所有场景,更稳妥)
如果原DataFrame本身存在空值,避免填充逻辑被干扰,可以手动指定首尾填充值:
import pandas as pd # 构造示例DataFrame df1 = pd.DataFrame({'Col1': ['v2', 'v3', 'v4', 'v5']}, index=[2,3,4,5]) new_index = [1,2,3,4,5,6] # 提前获取原索引首尾对应的值 orig_min_idx = df1.index.min() orig_max_idx = df1.index.max() head_val = df1.loc[orig_min_idx, 'Col1'] tail_val = df1.loc[orig_max_idx, 'Col1'] # 执行reindex后按范围赋值 result = df1.reindex(new_index) result.loc[result.index < orig_min_idx, 'Col1'] = head_val result.loc[result.index > orig_max_idx, 'Col1'] = tail_val
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

