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

Python pandas实现多列正负值转换为单列二进制字符串值

实现方案

直接通过pandas向量化操作即可完成需求,不需要额外循环或拆分多列,核心逻辑是逐元素判断正负后按行拼接字符串。

推荐写法(高性能,适配大数据量)

这是性能最优的实现,全程使用pandas底层向量化运算,比行遍历写法快数十倍:

import pandas as pd

# 构造示例数据
data = {
       "te1_pl": [-10,-7,47,1,9,-18,],
       "te2_pl": [-32,69,16,18,36,4.3,],
       "te3_pl": [305.3,-14,-38,37,47,16.5,],
       "te4_pl": [-69,41,-9,0,-33,28.1,],
       "te5_pl": [-44,41,82,42,6,-9.9,],}
df = pd.DataFrame(data)

# 生成二进制列
df["bin"] = (df > 0).astype(int).astype(str).agg("".join, axis=1)

代码逻辑拆解:

  • df > 0:逐元素判断数值是否大于0,返回同形状的布尔矩阵,符合规则的值为True,否则为False
  • .astype(int):将布尔值转换为整数,True转为1,False转为0
  • .astype(str):将整数转为字符串类型,为后续拼接做准备
  • .agg("".join, axis=1):按行将所有0/1字符串拼接为完整的二进制串

如果不需要用全部列计算,可以先筛选目标列再运算,比如只选择名称以_pl结尾的列:

# 筛选指定列参与计算
target_cols = [c for c in df.columns if c.endswith("_pl")]
df["bin"] = (df[target_cols] > 0).astype(int).astype(str).agg("".join, axis=1)

简易写法(适配小数据量)

如果数据量不大(小于10万行),也可以用apply行遍历实现,写法更直观易读:

def convert_bin(row):
    return "".join("1" if val > 0 else "0" for val in row)

df["bin"] = df.apply(convert_bin, axis=1)

结果验证

两种写法运行后得到的结果完全匹配预期:

te1_plte2_plte3_plte4_plte5_plbin
-10-32305.3-69-4400100
-769-14414101011
4716-38-98211001
1183704211101
93647-33611101
-184.316.528.1-9.901110

注意:实现严格遵循规则,数值等于0时会标记为0,和需求完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:30:54