Pandas多列合并为单列:按列后缀生成汇总列
合并DataFrame中同后缀列为满足条件的单列
嘿,我来帮你搞定这个需求!你需要把DataFrame里所有后缀相同的列合并成新列,规则是当该后缀下的所有列值全为'1'时新列取1,否则取0,对吧?这里有个高效的实现方案,比逐行循环或者apply逐行处理要快得多,尤其适合大数据量的场景:
步骤拆解与代码实现
首先,我们先把列按后缀分组,然后对每组列做向量化的判断操作:
import pandas as pd # 先模拟你的DataFrame(替换成你实际的df即可) data = { 'feat_a_1': ['1', '1', '0', '1'], 'feat_b_1': ['1', '0', '1', '1'], 'feat_c_2': ['1', '1', '1', '0'], 'feat_d_2': ['1', '1', '0', '1'] } df = pd.DataFrame(data) # 1. 按后缀分组:把所有列按最后一个下划线后的后缀归类 col_groups = {} for col in df.columns: # 拆分列名,取最后一个下划线后的部分作为后缀 if '_' in col: suffix = col.split('_')[-1] if suffix not in col_groups: col_groups[suffix] = [] col_groups[suffix].append(col) # 2. 遍历每个后缀组,生成对应的final列 for suffix, cols in col_groups.items(): # 向量化判断:先判断每个元素是否为'1',再检查每行是否全为True,最后转成int(1/0) df[f'final_{suffix}'] = (df[cols] == '1').all(axis=1).astype(int)
代码解释
- 列分组:通过拆分列名的方式,把所有同后缀的列归到一组,比如所有以
_1结尾的列会被分到suffix='1'的组里。 - 向量化判断:
df[cols] == '1'会生成一个布尔值的DataFrame,all(axis=1)检查每行的所有值是否都是True(也就是原列值全为'1'),最后astype(int)把布尔值转换成1(True)和0(False)。
效果展示
运行上面的代码后,你的DataFrame会新增final_1和final_2列:
| feat_a_1 | feat_b_1 | feat_c_2 | feat_d_2 | final_1 | final_2 |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 0 |
如果你的原数据中'1'是数字类型(不是字符串),只需要把代码里的'1'改成1就可以啦!
内容的提问来源于stack exchange,提问作者CandleWax
相关产品推荐
相关产品推荐

