如何在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
相关产品推荐
相关产品推荐

