如何在Pandas中按特定模式匹配列并计算列间差值
批量处理Pandas DataFrame中对应列的减法并生成差值列
我明白你想要实现的是不用手动逐个处理列,而是自动匹配那些前缀和中间部分相同、仅以_x/_y结尾的列,计算它们的差值并生成带_diff后缀的新列对吧?这确实能节省大量重复操作的时间,我给你一个简洁可靠的实现方案:
实现思路
首先我们需要从列名中提取出核心标识(也就是去掉末尾的_x/_y后的部分,比如WT_IGL_x的核心标识是WT_IGL),然后针对每个核心标识,找到对应的_x和_y列,计算x列 - y列的差值,最后将结果存入新的[核心标识]_diff列中。
完整代码示例
import pandas as pd # 创建你提供的简化版DataFrame df = pd.DataFrame({ 'WT_IGL_x':[1,2,3,2,1,1,3,4,1,2], 'LA_WHN_x':[1,0,1,0,1,1,0,0,1,0], 'LA_WHN_y':[2,1,2,3,3,4,1,1,2,1], 'WT_IGL_y':[2,1,2,3,3,4,1,1,2,1], 'GT_OPP_IGL_x':[1,2,3,2,1,1,3,4,1,2], 'GT_OPP_IGL_y':[1,2,3,2,1,1,3,4,1,2] }) # 提取所有列的核心标识(去掉末尾的_x/_y) core_names = list(set(col.rsplit('_', 1)[0] for col in df.columns)) # 批量计算差值并新增列 for core in core_names: # 先确认对应的x和y列都存在,避免报错 if f"{core}_x" in df.columns and f"{core}_y" in df.columns: df[f"{core}_diff"] = df[f"{core}_x"] - df[f"{core}_y"] # 查看最终结果 print(df)
代码说明
- 提取核心标识:
col.rsplit('_', 1)[0]会从列名的最后一个下划线处拆分,比如LA_WHN_x拆分后得到LA_WHN;用set去重是为了确保每个核心标识只被处理一次。 - 批量计算差值:遍历每个核心标识,先检查对应的
_x和_y列是否都存在(防止因列缺失导致的错误),然后直接计算x列 - y列,并将结果赋值给新的[core]_diff列。
运行这段代码后,你得到的DataFrame就和你期望的输出完全一致了——自动生成了WT_IGL_diff、LA_WHN_diff和GT_OPP_IGL_diff三列,差值计算准确无误。
内容的提问来源于stack exchange,提问作者Yun Tae Hwang
相关产品推荐
相关产品推荐

