Python新手求助:生成生产订单矩阵DataFrame时遇异常
解决生产序列DataFrame生成问题
嘿,我懂你碰到的麻烦了!你当前的核心问题出在这句代码上:
sequence = 'seq_'+str(len(df.columns))
它生成的是字符串形式的变量名(比如'seq_2'),而不是你之前定义的seq_2这个列表变量本身。所以当你用这个字符串去构建DataFrame时,自然会把字符串'seq_2'填充到每个单元格里,而不是你想要的数字序列。
正确的解决思路:用字典映射序列
与其通过拼接字符串找变量名,不如把不同产品数量对应的序列存在字典里,这样可以直接根据产品数量(列数)精准获取对应的序列,既清晰又安全:
import pandas as pd # 第一步:把所有序列存入字典,键是产品数量,值是对应序列 seq_dict = { 2: [[0, 0], [1, 0]], 3: [[0, 0, 0], [1, 0, 0], [0, 1, 0]] } # 假设你已经有了原始的df,先获取产品数量(列数) prod_count = len(df.columns) # 第二步:从字典中取出对应序列 target_sequence = seq_dict[prod_count] # 第三步:构建目标DataFrame,设置索引和列名为产品名 production_df = pd.DataFrame( target_sequence, index=[f"Prod{i+1}" for i in range(prod_count)], columns=[f"Prod{i+1}" for i in range(prod_count)] ) # 打印验证(以2款产品为例) print(production_df)
运行后,2款产品的输出就会符合你的预期:
Prod1 Prod2 Prod1 0 0 Prod2 1 0
补充说明:为什么不推荐用globals()/locals()?
可能你会想到用globals()[sequence]来通过字符串获取变量,但这种方法很不安全——如果输入的字符串意外匹配到其他全局变量,容易引发bug或安全问题。用字典的方式更直观,也更容易维护(后续新增产品数量的序列,直接往字典里加键值对就行)。
内容的提问来源于stack exchange,提问作者Amy W.
相关产品推荐
相关产品推荐

