假设我有以下Pandas DataFrame:
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6],
'c': [7, 8, 9]
})
a b c
0 1 4 7
1 2 5 8
2 3 6 9
我想要生成一个新的 pandas.Series
对象,使得这个 Series 中的每个值都是从 DataFrame 的随机一列中按行选择的。因此,这个 Series 的一个可能的输出如下:
0 7
1 2
2 9
dtype: int64
(在第0行中它随机选择了“c”,在第1行中它随机选择了“a”,并在第2行再次随机选择了“c”)。
我知道可以通过迭代行并使用random.choice
来选择每一行来实现此操作,但是迭代行不仅性能差,而且也是“非Pythonic”的。 此外,df.sample(axis=1)
会选择整个列,因此所有列都将从同一列中选择,这不是我想要的。 有没有更好的方法使用向量化的pandas方法来做到这一点?
newdf = df.apply(lambda row : row.sample(n=10000, replace=True).values, axis=1, result_type="expand")
- Joseph Garvin