如何在百万级DataFrame中生成记录阳性f列编号的新列?
高效生成Result列的解决方案
针对百万行规模的DataFrame,推荐使用矢量化操作实现需求,避免循环或逐行处理带来的性能损耗,具体步骤如下:
方法实现代码
import pandas as pd # 构造示例DataFrame data = { 'ID': [1,2,3,4,5], 'f_1': [1,0,1,1,0], 'f_2': [0,1,1,0,1], 'f_3': [1,1,0,1,1] } df = pd.DataFrame(data) # 提取f类列的编号(转为字符串并添加下划线) f_cols = df.filter(like='f_') col_numbers = f_cols.columns.str.extract(r'f_(\d+)', expand=False) # 矢量化生成Result列 df['Result'] = f_cols.dot(col_numbers + '_').str.rstrip('_') print(df)
代码说明
- 筛选f类列:用
df.filter(like='f_')快速定位所有以f_开头的特征列,无需手动指定列名 - 提取列编号:通过正则提取列名中的数字部分(如
f_1提取为1),转为字符串后添加下划线,方便后续拼接 - 矢量化拼接:利用
dot方法实现逐行的加权拼接(值为1的列保留对应编号字符串,值为0的列贡献空值),最后用str.rstrip('_')移除末尾多余的下划线
这种方法完全基于pandas的矢量化运算,处理百万行数据的速度远快于apply逐行处理,能有效保证性能。
内容的提问来源于stack exchange,提问作者Ishigami
相关产品推荐
相关产品推荐

