如何在大熊猫数据框中随机播放最后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
答案 0 :(得分:1)
对于默认索引,将参数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
用于最后一行,并用values
分配回numpy array
以防止索引对齐:
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
答案 1 :(得分:1)
您可以直接使用shuffle:
import pandas as pd
import numpy as np
np.random.seed(42)
dat = pd.DataFrame({'d1': np.linspace(0, 1, 10)})
np.random.shuffle(dat.values[5:])
print(dat)
输出
d1
0 0.000000
1 0.111111
2 0.222222
3 0.333333
4 0.444444
5 0.666667
6 1.000000
7 0.777778
8 0.555556
9 0.888889
或者,如果您愿意,permutation:
import pandas as pd
import numpy as np
dat = pd.DataFrame({'d1': np.linspace(0, 1, 10)})
dat.values[5:] = np.random.permutation(dat.values[5:])
print(dat)
输出
d1
0 0.000000
1 0.111111
2 0.222222
3 0.333333
4 0.444444
5 0.555556
6 0.888889
7 0.777778
8 1.000000
9 0.666667