[英]pandas shuffle last N rows
如何对 Pandas 数据框中的最后 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
对于默认索引,将参数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
你可以直接使用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
或者,如果你愿意, 排列:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.