如何批量计算Pandas DataFrame中同后缀列的差值
如何批量计算Pandas DataFrame中同后缀列的差值
嗨,你这个需求太实用了,完全不用手动硬编码每个后缀的差值列!我给你整理了一套自动化、易扩展的解决方案,不管以后新增多少后缀或者日期,都能轻松适配:
核心思路
- 自动提取所有唯一的列后缀(比如
001、002),不用手动指定; - 把要计算的差值规则整理成可循环的规则组,比如
date3 - date2对应diff_1前缀; - 循环遍历每个后缀和规则,自动构造列名并计算差值,彻底告别重复代码。
完整代码实现
import pandas as pd import numpy as np # 第一步:生成你的原始DataFrame branch_names = [f"Branch_{i}" for i in range(1, 11)] date_1 = '20241231' date_2 = '20250214' date_3 = '20250220' data = { 'Branch': branch_names, date_1 + '_001': np.random.randint(60, 90, 10), date_1 + '_002': np.random.randint(60, 90, 10), date_1 + '_003': np.random.randint(60, 90, 10), date_2 + '_001': np.random.randint(60, 90, 10), date_2 + '_002': np.random.randint(60, 90, 10), date_2 + '_003': np.random.randint(60, 90, 10), date_3 + '_001': np.random.randint(60, 90, 10), date_3 + '_002': np.random.randint(60, 90, 10), date_3 + '_003': np.random.randint(60, 90, 10) } df = pd.DataFrame(data) # 第二步:批量计算差值的核心逻辑 # 1. 自动提取所有唯一的列后缀(排除Branch列) suffixes = list(set(col.split('_')[-1] for col in df.columns if col != 'Branch')) # 2. 定义差值计算规则:(较晚日期, 较早日期, 差值列的前缀) diff_rules = [ (date_3, date_2, 'diff_1'), # date3 - date2 → 列名diff_1_后缀 (date_3, date_1, 'diff_2') # date3 - date1 → 列名diff_2_后缀 ] # 3. 循环遍历每个后缀和规则,自动生成差值列 for suffix in suffixes: for later_date, earlier_date, diff_prefix in diff_rules: # 自动构造要计算的列名 later_col = f"{later_date}_{suffix}" earlier_col = f"{earlier_date}_{suffix}" diff_col_name = f"{diff_prefix}_{suffix}" # 计算差值并赋值给新列 df[diff_col_name] = df[later_col] - df[earlier_col] # 查看结果(可选) print(df.head())
方案优势
- 完全自动化:不用手动编写每一行
df['diff_*'] = ...的代码,彻底摆脱硬编码的繁琐; - 超强扩展性:以后如果新增
_004这类后缀,或者新增date_4这类日期,只需要调整diff_rules或者直接运行代码,自动适配所有新列; - 低出错率:避免手动输入列名时的拼写错误,代码逻辑清晰易维护。
如果你的列名格式有变动(比如分隔符不是_),只需要调整col.split('_')里的分隔符即可,灵活性拉满!
备注:内容来源于stack exchange,提问作者hoa tran
相关产品推荐
相关产品推荐

