大数据量下Pandas DataFrame跨组高效插值(指定最近组)
大数据量Pandas跨组高效填充方案
针对你的需求,这里提供一套适合大数据量的向量化填充方案,完全避免低效的Python循环,步骤如下:
1. 构建示例DataFrame
先把你给出的原始数据转换成可操作的Pandas结构:
import pandas as pd import numpy as np raw_data = [ ['A', 1, 10], ['A', 2, 15], ['A', 3, 30], ['A', 4, 50], ['B', 1, np.nan], ['B', 2, np.nan], ['B', 3, np.nan], ['B', 4, np.nan], ['C', 1, np.nan], ['C', 2, np.nan], ['C', 3, np.nan], ['C', 4, np.nan], ['D', 1, 5], ['D', 2, 10], ['D', 3, 15], ['D', 4, 20], ['E', 1, np.nan], ['E', 2, np.nan], ['E', 3, np.nan], ['E', 4, np.nan] ] df = pd.DataFrame(raw_data, columns=['Group', 'Time', 'Value'])
2. 提取参考组的Time-Value映射
先把有完整数据的Group A和D的时间-值对应关系提取成字典,后续直接映射使用:
# 生成Group A的Time到Value的映射字典 a_time_value = df[df['Group'] == 'A'].set_index('Time')['Value'].to_dict() # 生成Group D的Time到Value的映射字典 d_time_value = df[df['Group'] == 'D'].set_index('Time')['Value'].to_dict()
3. 批量填充缺失值
根据你的规则:
- Group B用Group A的数据填充
- Group C、E用Group D的数据填充
用df.loc结合map实现向量化填充,这是处理大数据量最快的方式之一:
# 填充Group B df.loc[df['Group'] == 'B', 'Value'] = df.loc[df['Group'] == 'B', 'Time'].map(a_time_value) # 填充Group C和E target_groups = ['C', 'E'] df.loc[df['Group'].isin(target_groups), 'Value'] = df.loc[df['Group'].isin(target_groups), 'Time'].map(d_time_value)
4. 查看结果
执行后打印df就能得到你想要的预期输出:
print(df)
性能说明
这套方案全程使用Pandas的向量化操作,没有逐行循环,处理百万级甚至千万级数据时,速度比循环快几十到上百倍。映射字典只构建一次,重复利用,进一步降低计算成本。
内容的提问来源于stack exchange,提问作者Ksenija
相关产品推荐
相关产品推荐

