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
相关产品推荐
相关产品推荐

