2 回答

TA貢獻1887條經驗 獲得超5個贊
我只能這樣想,但是,性能可能是問題
np.array(s.tolist())[np.arange(len(s)), np.random.randint(3, size=len(s))]
array(['c', 'e', 'i', 'k', 'n'], dtype='<U1')
一些時機
%timeit s.explode().sample(frac=1, random_state=1)
5.05 ms ± 294 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit pd.Series([np.random.choice(i) for i in s])
23.1 ms ± 184 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit np.array(s.tolist())[np.arange(len(s)), np.random.randint(3, size=len(s))]
1.63 ms ± 50.3 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

TA貢獻1805條經驗 獲得超9個贊
您可以嘗試explode,隨機播放分解的系列,然后采樣。這甚至不需要列表具有相同的長度。
(s.explode()
.sample(frac=1, random_state=1) # random_state added for repeatability, drop if needed
.groupby(level=0).head(1)
)
輸出:
1 d
2 h
0 c
3 k
4 n
dtype: object
添加回答
舉報