如何对Pandas Dataframe中名称匹配指定字符串的列求和并生成新列
Pandas 按列名匹配规则新增求和列实现方案
核心实现(一行代码搞定)
两种常用写法都基于Pandas向量化运算,执行效率远高于自定义逐行遍历逻辑:
写法1:正则匹配(适合复杂规则)
使用filter方法配合正则筛选目标列,直接按行求和:df['C_sum'] = df.filter(regex=r'^C_').sum(axis=1)
- 正则规则可按需自定义:比如
r'_test$'匹配以_test结尾的列,r'xxx'匹配包含xxx的列 axis=1指定按行计算,必须传入
写法2:字符串匹配(适合简单规则)
如果只是前缀/后缀/包含这类简单匹配,用列名的str方法可读性更高:
# 前缀匹配 df['C_sum'] = df.loc[:, df.columns.str.startswith('C_')].sum(axis=1) # 后缀匹配示例 # df['C_sum'] = df.loc[:, df.columns.str.endswith('_end')].sum(axis=1) # 包含特定字符示例 # df['C_sum'] = df.loc[:, df.columns.str.contains('target')].sum(axis=1)
补充说明
- 两种实现都默认跳过空值
NaN求和,如果需要遇到空值就返回空,可添加参数skipna=False,例:sum(axis=1, skipna=False) - 面向百万行以上的大表也能保持很高的执行效率,不需要自行实现循环逻辑
测试示例
你可以用以下代码验证效果:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'A': [1,2,3], 'B': [4,5,6], 'C_1': [7,8,9], 'C_2': [10,11,12], 'C_3': [13,14,15], 'C_x': [16,17,18] }) # 新增C_sum列 df['C_sum'] = df.filter(regex=r'^C_').sum(axis=1) print(df['C_sum']) # 输出: # 0 46 # 1 50 # 2 54 # Name: C_sum, dtype: int64
内容的提问来源于stack exchange,提问作者tuesdaybike
相关产品推荐
相关产品推荐

