Pandas 随机排列数据框中组内的行,保持相对组顺序不变

问题描述 投票:0回答:1

给定以下 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)
它将随机排列所有行,但这不是我想要实现的目标。

谢谢

python pandas group-by shuffle
1个回答
0
投票

如果您的组是连续的,请使用

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
© www.soinside.com 2019 - 2024. All rights reserved.