如何在DataFrame中对指定多列(a、b、c)进行同步随机洗牌?
如何对DataFrame指定列同步随机洗牌?
首先,我理解你的需求:要让DataFrame中的a、b、c三列同步打乱行顺序(也就是这三列里每行的对应关系保持不变,只是整体随机重排),而d、e、f列保持原来的行数据不动。
下面是具体的实现步骤,用Pandas就能轻松搞定:
步骤1:准备示例DataFrame(如果你的数据已经存在,这步可以跳过)
先模拟你给出的数据结构,方便演示:
import pandas as pd # 构造你的DataFrame data = { 'a': ['hello.text', 'hello2.text', 'hello3.text', 'hello4.text'], 'b': [1, 2, 5, 8], 'c': [2, 10, 8, 15], 'd': [], # 这里留空或者填你实际的d列数据 'e': [], 'f': [] } df = pd.DataFrame(data)
步骤2:同步打乱a、b、c列
核心思路是先把这三列单独提取出来,打乱它们的行顺序,再替换回原DataFrame:
# 提取需要洗牌的列到临时DataFrame temp_cols = df[['a', 'b', 'c']] # 随机打乱临时DataFrame的行顺序(frac=1表示取全部行,random_state可选,用于固定随机结果方便复现) shuffled_temp = temp_cols.sample(frac=1, random_state=42).reset_index(drop=True) # 将打乱后的列替换回原DataFrame df[['a', 'b', 'c']] = shuffled_temp
执行完上面的代码后,你就会得到类似你给出的示例效果:a、b、c列的行随机重排,但每行的三个值依然对应,而d、e、f列保持原样。
补充说明
- 如果不需要固定随机结果,可以去掉
random_state参数,每次运行都会得到不同的洗牌结果。 - 如果你想让整个DataFrame的行(包括
d、e、f)都跟着a、b、c同步打乱,那更简单,直接用df = df.sample(frac=1)即可,但这和你描述的需求不太匹配,所以优先推荐上面的方法。
内容的提问来源于stack exchange,提问作者Mahdi Asiyabi
相关产品推荐
相关产品推荐

