You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame组内打乱行,保持组间顺序不变

Pandas 实现分组内打乱行且保持组顺序

问题描述

给定如下Pandas DataFrame:

import pandas as pd

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

需求为仅打乱sum列相同值对应组内的行,同时保持组的整体排序顺序(比如sum=3的组始终在最前,sum=4的组在中间,sum=5的组在最后)。直接使用df.sample(frac=1)会打乱所有行,无法满足需求。

解决方案

通过groupby结合sample实现组内打乱,同时保留组的顺序:

# 分组内打乱行,保持组顺序
df_shuffled = df.groupby('sum', group_keys=False).apply(lambda x: x.sample(frac=1)).reset_index(drop=True)

代码说明

  • groupby('sum'):按照sum列的值进行分组;
  • group_keys=False:避免将分组键(sum的值)添加到结果的索引中;
  • apply(lambda x: x.sample(frac=1)):对每个分组内的行执行随机打乱(sample(frac=1)表示抽取全部行,但顺序随机);
  • reset_index(drop=True):重置结果的索引,去掉原有的索引值。

执行后得到的结果示例(每次运行组内顺序可能不同,但组的整体顺序不变):

Org  sum
0    Tom    3
1   Rick    4
2   Dave    4
3  Kelly    4
4    Liz    5
5   Sara    5

内容的提问来源于stack exchange,提问作者hadji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:46:03