如何在Pandas中批量处理多列数据?简化重复操作方法咨询
简化两类重复Pandas操作的方案
第一类正态分布CDF计算的简化
你可以通过字典映射结合df.assign()方法,一次性完成所有列的计算,避免重复调用scipy.stats.norm.cdf:
import scipy.stats # 定义目标列与前缀的映射关系 col_prefix_map = {'A': 'a', 'B': 'b', 'C': 'c'} # 批量生成计算逻辑并赋值 df = df.assign(**{ col: scipy.stats.norm.cdf(df[f'{prefix}Score'], loc=df[f'{prefix}mean'], scale=df[f'{prefix}std']) * 100 for col, prefix in col_prefix_map.items() })
第二类分组求和转换的简化
针对多列的分组求和转换,直接传入列列表即可一次性处理,无需重复编写groupby逻辑:
# 一次性对D、E、F列执行分组求和转换 df[['D', 'E', 'F']] = df.groupby(['col1', 'col2'])[['D', 'E', 'F']].transform(sum)
合并成一行(可选)
如果要强行写成一行,也可以把两类操作链式调用,但会牺牲可读性:
import scipy.stats df = df.assign(**{'A': scipy.stats.norm.cdf(df['aScore'], loc=df['amean'], scale=df['astd'])*100, 'B': scipy.stats.norm.cdf(df['bScore'], loc=df['bmean'], scale=df['bstd'])*100, 'C': scipy.stats.norm.cdf(df['cScore'], loc=df['cmean'], scale=df['cstd'])*100}).pipe(lambda x: x.assign(**{col: x.groupby(['col1','col2'])[col].transform(sum) for col in ['D','E','F']}))
实际开发中更推荐分开编写,保证代码的可维护性。
内容的提问来源于stack exchange,提问作者Rinne Tsujikubo
相关产品推荐
相关产品推荐

