给定以下 df:
data = {'Org': ['Tom', 'Kelly', 'Rick', 'Dave','Sara','Liz'],
'sum': [3, 4, 4, 4, 5, 5]}
df = pd.DataFrame(data)
# Org sum
# 0 Tom 3
# 1 Kelly 4
# 2 Rick 4
# 3 Dave 4
# 4 Sara 5
# 5 Liz 5
我只想打乱该列中的重复值并保持排序顺序。
输出应如下所示:
data = {'Org': ['Tom', 'Rick', 'Dave', 'Kelly','Liz','Sara'],
'sum': [3, 4, 4, 4, 5, 5]}
df = pd.DataFrame(data)
# Org sum
# 0 Tom 3
# 1 Rick 4
# 2 Dave 4
# 3 Kelly 4
# 4 Liz 5
# 5 Sara 5
使用
df.sample(frac=1)
它将随机排列所有行,但这不是我想要实现的目标。
谢谢
groupby.sample
:
out = df.groupby('sum', sort=False).sample(frac=1)
输出示例:
Org sum
0 Tom 3
3 Dave 4
1 Kelly 4
2 Rick 4
5 Liz 5
4 Sara 5
如果不是,如本例所示:
Org sum
0 Tom 3
1 Kelly 4
2 Rick 4
3 Sara 5
4 Liz 5
5 Dave 4
groupby.transform
将索引打乱到位,然后重新索引:
out = df.loc[df.groupby('sum', sort=False)['sum']
.transform(lambda g: g.sample(frac=1).index)]
输出示例:
Org sum
0 Tom 3
2 Rick 4
5 Dave 4
4 Liz 5
3 Sara 5
1 Kelly 4