我想通过从剩余列中随机采样数据来创建一个新列。
考虑一个具有“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”列的相应条目之一来创建的。例如,从第 2 列选择“0.8”,从第 N 列选择“B”,依此类推。
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)