求助:如何创建元素为9×i+j、索引0-5列x1-x55的Pandas DataFrame?
构造符合要求的Pandas DataFrame
你的需求是创建一个6行(索引0-5)、55列(列名x1到x55)的DataFrame,其中每个位置(i, x_j)的元素值为9*i + j。下面是两种实现方式:
方法一:利用Numpy广播快速生成
这种方法效率更高,适合大规模数据:
import pandas as pd import numpy as np # 定义索引和列名 index = range(6) # 索引0到5 columns = [f'x{j}' for j in range(1, 56)] # 列名x1到x55 # 用广播生成数值矩阵:将索引转为列向量,列序号转为行向量,自动扩展计算 i_arr = np.array(index).reshape(-1, 1) j_arr = np.array(range(1, 56)).reshape(1, -1) values = 9 * i_arr + j_arr # 构建DataFrame dt = pd.DataFrame(values, index=index, columns=columns)
方法二:用列表推导式逐行生成
如果不想依赖Numpy,可以用纯Python列表推导:
import pandas as pd index = range(6) columns = [f'x{j}' for j in range(1, 56)] # 逐行生成数据:每个索引i对应的行是[9*i+1, 9*i+2, ..., 9*i+55] data = [[9*i + j for j in range(1, 56)] for i in index] dt = pd.DataFrame(data, index=index, columns=columns)
原代码的问题说明
你原来的代码用np.random.rand(10,10)生成了10行10列的随机数,列名只到x5,完全不符合需求。上面的代码直接替换了数值生成逻辑,同时修正了索引和列名的定义。
内容的提问来源于stack exchange,提问作者esme
相关产品推荐
相关产品推荐

