如何更高效地从pandas DataFrame提取指定指标生成目标字典?
优化Pandas DataFrame提取统计指标生成字典的实现
核心优化思路
- 利用pandas内置的
max()/min()方法替代原生Python函数,大数据量下性能更好 - 动态筛选sensor列,避免硬编码每个传感器列名,扩展性更强
- 只计算一次所有传感器的极差,避免重复计算逻辑
- 去掉冗余的
eval()调用(原代码中eval属于完全多余的错误用法)
实现代码
import pandas as pd # 示例DataFrame lake = pd.DataFrame({ 't': ['t0', 't1', 't2', 't3'], 'area': [10, 20, 10, 15], 'freq': [100, 88, 130, 140], 'sensor1_avg': [2, 5, 2, 8], 'sensor2_avg': [3, 3, 2, 3], 'sensor3_avg': [7, 5, 2, 3], 'sensor4_avg': [7, 5, 2, 3] }) def process_df_todict(df): # 1. 计算area和freq的极值 max_area = df['area'].max() min_area = df['area'].min() max_freq = df['freq'].max() min_freq = df['freq'].min() # 2. 动态筛选所有sensor列,计算每列极差(最大值-最小值) sensor_cols = df.filter(like='sensor_avg').columns sensor_deltas = df[sensor_cols].max() - df[sensor_cols].min() # 3. 计算sensor极差的最大最小值 max_delta_sensor_avg = sensor_deltas.max() min_delta_sensor_avg = sensor_deltas.min() # 4. 拼接结果字典 return { 'max_area': max_area, 'min_area': min_area, 'max_freq': max_freq, 'min_freq': min_freq, 'max_delta_sensor_avg': max_delta_sensor_avg, 'min_delta_sensor_avg': min_delta_sensor_avg } # 测试调用 print(process_df_todict(lake))
输出结果
运行上述代码会得到你预期的输出:
{'max_area': 20, 'min_area': 10, 'max_freq': 140, 'min_freq': 88, 'max_delta_sensor_avg': 6, 'min_delta_sensor_avg': 1}
优势说明
- 性能更好:pandas内置向量化运算比原生Python遍历计算效率高1~2个数量级,数据量越大优势越明显
- 易扩展:新增传感器列无需修改代码,会自动纳入计算
- 易维护:没有重复冗余的逻辑,代码可读性更高
- 无冗余操作:去掉了原代码中完全不必要的
eval调用,避免不必要的性能损耗和安全风险
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

