首页 > 解决方案 > pandas 随机播放最后 N 行

问题描述

如何打乱熊猫数据框中的最后 N 行?当我说“随机播放”时,我的意思是随机改变行的顺序。这是我到目前为止所尝试的。我不知道如何正确重置索引。

import pandas as pd
import numpy as np
dat = pd.DataFrame({'d1': np.linspace(0, 1, 10)})
pd.concat([dat[:5], dat[5:].sample(frac=1).reset_index(drop=True)])

输出:

         d1
0  0.000000
1  0.111111
2  0.222222
3  0.333333
4  0.444444
0  0.777778
1  0.666667
2  0.888889
3  1.000000
4  0.555556

标签: pythonpandas

解决方案


ignore_index=True对于默认索引添加参数concat

dat = pd.DataFrame({'d1': np.linspace(0, 1, 10)})
df = pd.concat([dat[:5], dat[5:].sample(frac=1)], ignore_index=True)

另一种解决方案是sample仅用于最后一行并分配回numpy arrayvalues防止索引对齐:

dat.iloc[5:] = dat.iloc[5:].sample(frac=1).values

np.random.shuffle就地工作的 Numpy 解决方案:

np.random.shuffle(dat.iloc[5:].values)

print (df)
         d1
0  0.000000
1  0.111111
2  0.222222
3  0.333333
4  0.444444
5  0.666667
6  0.888889
7  1.000000
8  0.555556
9  0.777778

推荐阅读