Skip to main content
 首页 » 编程设计

python之通过随机抽取其他列数据创建新列

2025年05月04日10linjiqin

我想通过从剩余列中随机抽取数据来创建一个新列。

考虑一个包含“N”列的数据框,如下所示:

|---------------------|------------------|---------------------| 
|      Column 1       |     Column 2     |      Column N       | 
|---------------------|------------------|---------------------| 
|          0.37       |         0.8      |          0.0        | 
|---------------------|------------------|---------------------| 
|          0.0        |         0.0      |          0.8        | 
|---------------------|------------------|---------------------| 

生成的数据框应该是这样的

|---------------------|------------------|---------------------|---------------| 
|      Column 1       |     Column 2     |      Column N       |     Sampled   | 
|---------------------|------------------|---------------------|---------------| 
|          0.37       |         0.8      |          0.0        |       0.8     | 
|---------------------|------------------|---------------------|---------------| 
|          0.0        |         0.0      |          B          |        B      | 
|---------------------|------------------|---------------------|---------------| 
|          A          |         5        |          0.8        |        A      | 
|---------------------|------------------|---------------------|---------------| 

“采样”列的条目是通过随机选择“N”列的相应条目之一创建的。例如,“0.8”是从第 2 列中选择的,“B”是从第 N 列中选择的,依此类推。

df.sample(axis=1) 只是选择一列并将其返回。这不是我想要的。

实现此目标的最快方法是什么?该方法需要高效,因为原始数据框很大,有很多行和列。

请您参考如下方法:

您可以使用底层 numpy 数组并为每行选择一个随机索引。

u = df.values 
r = np.random.randint(0, u.shape[1], u.shape[0]) 
 
df.assign(Sampled=u[np.arange(u.shape[0]), r]) 

  Column 1  Column 2 Column N Sampled 
0     0.37       0.8      0.0    0.37 
1      0.0       0.0        B       B 
2        A       5.0      0.8       A