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

Python如何根据每行totalnumber值为30个新增列按规则分配数值

实现方案

你的需求可以通过简单的数学计算实现,不需要复杂的循环逻辑:
对每一行的TotalNumbers取值:

  • 先计算基础值base = TotalNumbers // 30,这是所有30个列的默认取值
  • 再计算余数rem = TotalNumbers % 30,这是需要额外多分配1的列的数量,优先分配给靠前的列
  • 前rem个列的取值为base + 1,剩余列的取值为base

这个逻辑完全匹配你给出的示例效果:

  • TotalNumbers=9:base=0,rem=9 → 前9列值为1,其余为0
  • TotalNumbers=30:base=1,rem=0 → 所有列值为1
  • TotalNumbers=35:base=1,rem=5 → 前5列值为2,其余为1

代码实现

import pandas as pd

# 原有筛选逻辑保留,加copy避免链式赋值警告
df = baseline.loc[baseline.Pathway == "Referred", grouping_cols + ["TotalNumbers"]].copy()

# 计算基础值和余数
base = df["TotalNumbers"] // 30
rem = df["TotalNumbers"] % 30

# 批量生成30个列
for col_idx in range(1, 31):
    df[f"col{col_idx}"] = base + (col_idx <= rem)

说明

你之前的代码问题在于将所有余数都加给了第一列,不符合前N列各加1的需求。上述方案是向量化操作,不需要逐行遍历,性能远高于逐行循环的实现,即使数据量很大也可以快速运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:02