You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame如何分离指定列并按行判断值生成新列

问题场景

需要处理的初始DataFrame如下:

import pandas as pd

df =pd.DataFrame(
    data = {'m1' : [0,0,1,0,0,0,0,0,0,0,0],
            'm2' : [0,0,0,0,0,1,0,0,0,0,0],
            'm3' : [0,0,0,0,0,0,0,0,1,0,0],
            'm4' : [0,1,0,0,0,0,0,0,0,0,0],
            'm5' : [0,0,0,0,0,0,0,0,0,0,0],
            'm6' : [0,0,0,0,0,0,0,0,0,1,0]}
) 

初始DataFrame内容:

m1 m2 m3 m4 m5 m6
0  0  0  0  0  0  0
1  0  0  0  1  0  0
2  1  0  0  0  0  0
3  0  0  0  0  0  0
4  0  0  0  0  0  0
5  0  1  0  0  0  0
6  0  0  0  0  0  0
7  0  0  0  0  0  0
8  0  0  1  0  0  0
9  0  0  0  0  0  1
10 0  0  0  0  0  0

需求为:

  • 保留m1列,合并m2~m6的特征逻辑
  • 逐行判断,m2到m6任意一列值为1时,新列m_other赋值为1,否则赋值为0

期望输出:

m1 m_other
0  0  0  
1  0  1  
2  1  0  
3  0  0 
4  0  0  
5  0  1  
6  0  0  
7  0  0  
8  0  1  
9  0  1 
10 0  0

之前尝试使用any函数实现未成功。

实现方法

any函数完全可以实现这个需求,之前失败基本是因为没有指定axis=1参数——pandas的any默认按列(axis=0)判断整列是否有真值,我们需要的是逐行判断,所以必须指定按行聚合。
完整实现代码:

# 选中m2到m6的所有列,逐行判断是否存在1,布尔值转int即为0/1
df["m_other"] = df.loc[:, "m2":"m6"].any(axis=1).astype(int)
# 提取需要的两列得到最终结果
res = df[["m1", "m_other"]]

如果m2到m6在表中不是连续排列的,可以手动传入列名列表选择:

df["m_other"] = df[["m2", "m3", "m4", "m5", "m6"]].any(axis=1).astype(int)

运行后得到的结果和预期完全一致。

逻辑说明:由于所有特征列的值只有0和1,any会将1识别为True、0识别为False,逐行判断只要有一个True就返回该行结果为True,转换为整型后正好对应需要的1/0赋值,不需要额外写判断条件。

内容的提问来源于stack exchange,提问作者Dai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:18:17