如何简化Pandas按国家分组批量计算多列Score差分的代码
方案1:分组后批量计算多列差分(最推荐)
直接对分组后的所有目标Score列一次性调用diff方法,不用逐列或循环处理,代码简洁且是pandas原生向量化实现,效率更高:
import pandas as pd # 1. 先按国家、年份升序排序,确保差分逻辑是「后一年减前一年」,避免数据顺序混乱导致结果错误 df = df.sort_values(['Country', 'Year'], ascending=[True, True]).reset_index(drop=True) # 2. 筛选所有需要计算差分的Score列,也可以手动指定列表:score_cols = ['Score1','Score2','Score3','Score4'] score_cols = [col for col in df.columns if col.startswith('Score')] # 3. 批量计算差分并赋值到原df,diffN对应ScoreN的差分结果 df[[f'diff{i+1}' for i in range(len(score_cols))]] = df.groupby('Country')[score_cols].diff()
方案2:循环实现
如果更偏好循环写法,也可以用以下代码替代逐行手写逻辑:
df = df.sort_values(['Country', 'Year'], ascending=[True, True]).reset_index(drop=True) for col_num in range(1, 5): df[f'diff{col_num}'] = df.groupby('Country')[f'Score{col_num}'].diff()
两种方案都能实现和你原逐列代码完全一致的效果,无需手动为每一列编写计算逻辑。
内容的提问来源于stack exchange,提问作者Aiden Blake
相关产品推荐
相关产品推荐

