如何在Pandas DataFrame中高效对多组列执行相同操作?
解决方案
1. 修复你的函数
你的函数返回None是因为没有写return语句,Python函数如果没有显式return,默认返回None。修正如下:
def calculate_difference(df, sum_cols_start: str, sum_cols_end: str, subtract_col: str): return df.loc[:, sum_cols_start:sum_cols_end].sum(numeric_only=True, axis=1) - df.loc[:, subtract_col] # 测试调用 df['A_dif'] = calculate_difference(df, 'A1', 'A3', 'A4') df['B_dif'] = calculate_difference(df, 'B1', 'B3', 'B4')
调用后就能得到正确计算结果,生成A_dif和B_dif列。
2. 更高效的批量处理方案
因为你有10组类似列(A、B、C...),手动调用函数过于繁琐。可以通过提取列名前缀自动批量处理,代码简洁易维护:
# 提取所有唯一的列前缀(自动识别A、B,后续新增C/D等也无需修改) prefixes = sorted({col[0] for col in df.columns}) # 遍历每个前缀,自动计算并生成新列 for prefix in prefixes: sum_cols_start = f"{prefix}1" sum_cols_end = f"{prefix}3" subtract_col = f"{prefix}4" df[f"{prefix}_dif"] = df.loc[:, sum_cols_start:sum_cols_end].sum(numeric_only=True, axis=1) - df.loc[:, subtract_col]
运行后会自动为所有前缀生成对应的X_dif列,后续新增列组也能直接兼容。
验证结果
处理后的DataFrame新增列结果示例:
A1 A2 A3 A4 B1 B2 B3 B4 A_dif B_dif 0 10 10 30 75 10 30 10 40 -25 10 1 20 20 0 0 20 0 10 30 40 0 2 30 30 40 0 30 20 20 20 100 50 3 10 40 10 25 40 40 30 10 35 100
内容的提问来源于stack exchange,提问作者Dan Singer
相关产品推荐
相关产品推荐

