如何筛选pandas dataframe后对列执行计算并回填至原数据框
实现方法
方法1:映射字典+向量化操作(推荐,扩展性强、性能高)
先把Group和Class的组合与对应除数做成映射字典,直接批量计算回填即可,后续新增规则只要更新字典就行,不用改逻辑:
import pandas as pd # 构造除数映射:key为(Group, Class)元组,value为对应除数 div_map = { ('a', 'x'): 2, ('a', 'y'): 3, ('b', 'x'): 4, ('b', 'y'): 5 } # 批量匹配每行的除数,计算后直接回填到Data列 df['Data'] = df['Data'] / df.set_index(['Group', 'Class']).index.map(div_map.get)
方法2:np.select条件匹配(适合规则少的场景)
如果规则不会频繁新增,直接写条件匹配更直观:
import numpy as np conditions = [ (df['Group'] == 'a') & (df['Class'] == 'x'), (df['Group'] == 'a') & (df['Class'] == 'y'), (df['Group'] == 'b') & (df['Class'] == 'x'), (df['Group'] == 'b') & (df['Class'] == 'y') ] # 顺序和上面的条件一一对应 div_list = [2, 3, 4, 5] df['Data'] = df['Data'] / np.select(conditions, div_list)
内容的提问来源于stack exchange,提问作者user14207664
相关产品推荐
相关产品推荐

